2013-05-08 42 views
1

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

tldr:代码只有在pyc改变或删除后才能正常工作,然后停止工作。

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

+0

没有你的程序有副作用,其活得比过程?文件,FS锁,数据库更新?您是在本地运行,还是远程/网络驱动器上的任何文件? – shx2 2013-05-08 20:26:10

+0

似乎没有任何副作用。我正在运行一个ssh终端。 – amustafa 2013-05-08 20:34:22

+0

作为更新,我从未找到满意的解决方案。我现在所做的就是不生成pyc文件。我的应用程序在开始时导入一次,并在后台运行,所以这不是一个问题。 – amustafa 2013-06-19 08:21:43

回答

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 
+0

我不确定你是什么意思的同步,但似乎有一些错误的pyc,根据我上面的编辑。 – amustafa 2013-05-08 20:38:38

+0

用于同步的同步,如rsync或更新文件的云存储。也许CVS?删除pyc文件,然后使用-B运行python并确保其未创建。如果它是从其他地方创建的(天堂可能?) – beiller 2013-05-08 20:41:06

+0

当我添加-B时,pyc没有创建,程序工作正常。虽然我不知道添加-B是否是一个长期解决方案。 – amustafa 2013-05-08 21:09:41