我在不同的目录中有一个脚本script.py
和多个模块,它们彼此依赖。为简单起见,我们只看它们中的两个,分别是module1.py
和module2.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/