如何在python中通过一个符号链接导入多个文件?
我有一个script如何在python中通过一个符号链接导入多个文件?,python,python-2.7,import,environment-variables,pythonpath,Python,Python 2.7,Import,Environment Variables,Pythonpath,我有一个scriptscript.py和不同目录中的多个模块,它们都相互依赖。为了简单起见,我们只看其中的两个,module1.py和module2.py,其中前者导入后者。所有这些都应该由script.py使用 现在,我将module1.py的符号链接添加到script.py目录中,因此我的目录树如下所示: . ├── mymodules │ ├── module1.py │ └── module2.py └── myscript ├── module1.py -> ..
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
都会失败,异常情况是导入错误:没有名为module2
和sys.path
的模块包含符号链接的目录,而不是文件!为什么?我该如何解决这个问题
所有代码:
我想如果你想亲自尝试的话,你可能需要这个
myscript/script.py:
mymodules/module1.py
mymodules/module2.py
简单地说,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
在模块内更改sys.path
非常关键。如果真的需要,只在脚本中设置它。py@Daniel你能详细谈谈吗?我认为python的全部意义在于,您可以随时更改任何内容。为什么不是PYTHONPATH
?我的意思是这真的只是一个包含路径。非常感谢。我完全忘记了.pyc
文件,您的解决方案非常通用。谢谢
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
import successful
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