2016-10-08 22 views
0

为了让自己在自己的项目中明确filestructure我用下面的代码片段到项目主文件夹动态地添加到PYTHONPATH,因此保证我可以从上面甚至导入文件一个文件位置。动态更新PYTHONPATH防止.pyc文件更新

import sys 
import os 
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), ".")) 

因为我这样做,当我开始我的主文件,更改模块不再被认可,直到我手动删除任何pyc文件。因此,我认为这是由于某种原因阻止python检查pyc文件是否是最新的。我能以任何方式解决这个问题吗?

回答

1

你可以试着让python不写这些* .pyc文件。

How to avoid .pyc files?

对于大型项目,这将略微从性能的角度关系。有可能你不关心这一点,然后你可以不创建pyc文件。

+0

称其为包的一部分,如果有任何心不是更优雅的解决方案,我会尝试。虽然我想明白为什么会发生这种情况。 – weidler

+0

'sys.modules'包含解释器加载的模块。如果你正在修改PYTHONPATH并且一些新的模块会覆盖已经存在的模块,那么新的变化将不会被看到 - 可能。无论如何,你不应该像这样使用魔法。只需将PYTHONPATH设置为尽可能高的文件层次结构,然后完成。另外,你应该使用virtualenv来安装你的项目和其他依赖项,并且为更复杂的东西安装setup.py入口点。你有一个项目是从一个简单的脚本发展而来,你从来没有重构过它吗? –

1

如果模块名称不再是唯一的,那么添加已导入模块的路径可能会导致您遇到麻烦。想想看,你做import foo,这增加了其父包barsys.path - 它现在可能也做import bar.foo。 Python会将两者都视为不同的模块,这可能会混淆任何依赖模块标识的东西。

你真的应该考虑为什么你需要做的这个技巧在首位。如果你有放置在您的包内的可执行文件,你不应该做

cd bardir/bar 
python foo 

而是通过

cd bardir 
python -m bar.foo