如何强制 Python 忽略或重新创建 .pyc/.pyo 文件?

3
我正在开发一个科学的Python应用程序,其中使用了多进程和进程池。有时我会犯错,导致自己受到fork炸弹攻击。这会导致我的笔记本电脑冻结,需要进行硬重置。然而,当我再次加载时,我的Python安装似乎已经损坏。我在基本导入时遇到奇怪的错误,如import string
我追踪到一个点,看起来像是Python正在尝试为安装在系统目录中的一些系统模块创建pyc/pyo文件(我正在Windows上工作)。我可以通过单击安装目录,按修改时间排序并手动删除基于修改日期创建的所有pyc/pyo对象来暂时解决这个问题。
有没有一种方法可以强制Python忽略任何现有的pyc/pyo对象,并在解释器启动时重新创建它们?或者,删除系统Python安装中的所有pyc/pyo对象是否安全?在我的情况下,这是C:\Python27

为什么不一开始就创建它们呢?还有,作业对象。 - Ignacio Vazquez-Abrams
我不知道如何防止Python创建它们,有点惊讶于用户级别的Python进程会影响系统Python安装。此外,“作业对象”是什么? - Rich
不要阻止它创建它们。在第一次安装Python时,保留创建它们的复选框。 - Ignacio Vazquez-Abrams
3个回答

2
通常,强制重新编译的简单方法是删除 .pyc 文件,但在系统文件的情况下,您可能没有 .py 文件,因此要非常小心。
你最好创建一个虚拟环境作为沙盒,并保护你的文件,你可以根据需要轻松地重新创建它。
如果你已经在这样的环境中运行了,那么可能你的任务并不是你应该检查的。
我还强烈建议将这样的测试作为受限用户而不是管理员或具有管理员权限的高级用户运行,这可能会在一开始时增加一些工作量,但具有一些优点:
安全性 - 有限用户必须非常努力才能破坏系统,即如果管理员已为所有用户安装了Python,则有限用户不应具有对安装目录的写访问权限,
部署 - 如果您将代码传递给其他用户,他们可能没有管理员权限,但是您将知道您的代码将在没有他们的情况下运行(假设满足前提条件)。
可移植性 - 如果您希望在Linux机器上运行,则您的代码不应需要管理员权限来运行。
可扩展性 - 如果您有机会在超级计算机/集群上运行代码,我几乎可以保证它不会作为管理员运行。

谢谢您的建议。我正在使用虚拟环境来安装本地软件包并进行调试,但我使用系统Python来引导它。我想我可以使用虚拟环境来构建虚拟环境。 - Rich
如果您在崩溃时正在虚拟环境中运行,并且它正在损坏系统中的 .pyc/d 文件,那么您的虚拟环境可能是使用 --system-site-packages 构建的,或者您的虚拟环境设置了 Python 路径以指向全局安装。 - Steve Barnes

0
你可以触碰所有的.py文件,然后强制导入。
但是你为什么想要这样做呢?

我想这样做是因为我的系统范围内的Python安装已经损坏。在损坏之后,如果不从系统安装路径中清除已损坏的pyc文件,我就无法启动Python进程。 - Rich

0

除了主要用例之外,我还看到一个用例是当您从git存储库中工作并在分支之间切换时。.py文件可能会被检出具有不同的内容,但时间戳较旧。如果您不以某种方式强制重新创建.pyc文件,则会出现问题。

CKol


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接