【问题标题】:Python Code Momentarily Working only when pyc files changePython 代码仅在 pyc 文件更改时暂时工作
【发布时间】:2013-05-08 20:21:29
【问题描述】:

我遇到了一个非常奇怪的问题。我已经将一些 python 代码从一个版本更改为下一个版本,它似乎破坏了代码(尽管通过了测试)。当我去添加调试语句时,代码开始正常工作。再试一次就失败了。经过实验,我意识到只有在更改或删除 pyc 文件后才能运行一次。什么??有没有其他人经历过这个?有什么想法可以解决这个问题吗?

tldr:代码仅在 pyc 更改或删除然后停止工作后才有效。

编辑:问题似乎是 pyc 文件本身。我在没有运行代码的情况下编译了 pyc 文件并尝试运行它,但它没有工作。 我做了一些研究,我认为 python 创建这些 pyc 的方式是,当我尝试运行它时,它会将其加载到环境中,然后创建 pyc。这意味着它在从源加载时工作,但从 pyc 加载时失败。

【问题讨论】:

  • 您的程序是否有比进程更有效的副作用?文件、FS 锁、数据库更新?您是在本地运行,还是远程/网络驱动器上的任何文件?
  • 好像没有什么副作用。我正在通过 ssh 终端运行。
  • 作为更新,我从未找到令人满意的解决方案。我现在所做的只是不生成 pyc 文件。我的应用程序在开始时导入所有内容并在后台运行,因此这不是真正的问题。

标签: python ubuntu pyc


【解决方案1】:

也许您的 PYC 文件正在通过某种同步更新,在编译后写入,然后 python 运行 PYC 而不是重新编译 PY。

试试这个:

>python --help
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
-B     : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x

【讨论】:

  • 我不确定您所说的同步是什么意思,但根据我上面的编辑,pyc 似乎确实有问题。
  • sync 用于同步,例如 rsync,或更新文件的云存储。也许是 CVS?删除 pyc 文件,然后使用 -B 运行 python 并确保它没有被创建。如果它是从其他地方创建的(也许是天堂?)
  • 当我添加 -B 时,不会创建 pyc 并且程序可以正常工作。虽然我不知道添加 -B 是否是一个长期的解决方案。
  • 听起来很有趣。可能是一个错误,如果可能,请尝试更新 python。或者可能与文件系统相关。尝试将 python 文件移动到另一个磁盘或另一个文件夹等。还尝试 reproducint 并检查 pyc 上的修改日期以及它是否在您上次运行 .py 之后
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 2023-03-07
  • 2018-09-01
相关资源
最近更新 更多