我在不同的目录中有一个脚本script.py和多个模块,它们彼此依赖。为简单起见,我们只看它们中的两个,分别是module1.pymodule2.py。所有这些都应由script.py使用。

现在,我将module1.py的符号链接添加到script.py的目录中,因此目录树如下所示:

.
├── mymodules
│   ├── module1.py
│   └── module2.py
└── myscript
    ├── module1.py -> ../mymodules/module1.py
    └── script.py


现在仅运行script.py不起作用,因为PYTHONPATH不包含mymodules目录,因此module1无法导入module2。现在,有一个简单的解决方法。将module1.py的路径追加到PYTHONPATH

sys.path.append(os.path.abspath(os.path.join(os.path.realpath(__file__),os.path.pardir)))


这就是问题出现的地方:这行得通,但只有一次!

第一次运行正常,所有模块均已导入,没有任何问题。

但是$ ./script.py的所有后续执行都会失败,但ImportError: no module named module2例外,并且sys.path包含符号链接的目录,而不是文件!为什么?我该如何解决?





所有代码:

我想,如果您想自己尝试一下,可能会需要这个。

myscript / script.py:

#!/usr/bin/env python

import module1


mymodules / module1.py

#!/usr/bin/env python

import sys, os

#append directory of this file to PYTHONPATH
sys.path.append(os.path.abspath(os.path.join(os.path.realpath(__file__),os.path.pardir)))

#print for control reasons
print sys.path

import module2


mymodules / module2.py

#!/usr/bin/env python

print "import successful!"

最佳答案

只需将append的真实目录名更改为sys.path

sys.path.append(os.path.dirname(os.path.realpath(__file__)))


该输出是

import successful


但是,将符号module1.py编译为module1.pyc之后,modeul1.pyc将位于myscript。上面的代码不起作用。



所以解决方案是将mymodules/module1.py修改为

import os
import sys

srcfile = __file__
if srcfile.endswith('.pyc'):
    srcfile = srcfile[:-1] # pyc to py
sys.path.append(os.path.dirname(os.path.realpath(srcfile)))

import module2

关于python - 如何通过python中的一个symlink导入多个文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23426896/

10-09 05:49