gpt4 book ai didi

python - 如何在Python中通过一个符号链接(symbolic link)导入多个文件?

转载 作者:太空宇宙 更新时间:2023-11-03 18:24:44 26 4
gpt4 key购买 nike

我有一个脚本script.py不同目录中的多个模块都相互依赖。为了简单起见,我们只看其中两个,module1.pymodule2.py ,其中第一个导入后者。所有这些都应该由 script.py 使用.

现在我添加了一个符号链接(symbolic link)到 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 module2sys.path包含符号链接(symbolic link)的目录,而不是文件! 为什么?我该如何解决这个问题?

<小时/><小时/>

所有代码:

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

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!"

最佳答案

简单地,将真实目录名附加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中通过一个符号链接(symbolic link)导入多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23426896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com