如何解决Python和IronPython中的sys.path差异
我在编写测试解析器的脚本时遇到了路径问题。在使用当前工作目录作为sys.path的一部分时,Python(27和3)的行为似乎与IronPython不同。因此,我的内部包路径不起作用 这是我的包裹布局如何解决Python和IronPython中的sys.path差异,python,ironpython,Python,Ironpython,我在编写测试解析器的脚本时遇到了路径问题。在使用当前工作目录作为sys.path的一部分时,Python(27和3)的行为似乎与IronPython不同。因此,我的内部包路径不起作用 这是我的包裹布局 MyPackage __init__.py _test __init__.py common.py parsers __init__.py _test my_test.py 我正在尝试从MyPackage目录中调用脚本
MyPackage
__init__.py
_test
__init__.py
common.py
parsers
__init__.py
_test
my_test.py
我正在尝试从MyPackage目录中调用脚本
命令行语句:
python./parsers/_test/my_test.py
ipy./parsers/_test/my_test.py
位于my_test.py文件中的导入语句为
from _test.common import TestClass
在python场景中,我只得到附加到sys.path的MyPackage/parsers/_测试目录,因此无法找到MyPackage。在IronPython场景中,MyPackage/parsers/_测试目录和MyPackage/都位于sys.path中。如果我从_test目录中调用测试,我可能会得到同样的错误引用(它不知道MyPackage)。即使我将测试文件合并到_test目录中,我仍然会有这个路径问题
我应该注意,我只是测试了一下,如果我做了类似的事情
import sys
import os
sys.path.append(os.getcwd())
它将正确加载。但我必须对每个文件都这样做
是否有任何方法可以在不执行以下操作的情况下修复此类路径问题
A.在每个文件中附加sys.path的相对路径
B.附加路径以包含MyPackage(我不希望我的包作为python“全局”系统路径的一部分)
非常感谢你给我的建议 想到两个选项:
- 使用环境变量PYTHONPATH和include
- 在程序开始时将其添加到sys.path
- 如果需要动态导入相对路径,则始终可以执行以下操作
我想到了两个选择:
- 使用环境变量PYTHONPATH和include
- 在程序开始时将其添加到sys.path
- 如果需要动态导入相对路径,则始终可以执行以下操作
这绝对有效。这有点违反了我的限制A(我必须对每个文件都这样做),但这是某种标准做法吗?我无法想象其他人也没有这个问题。。。或者他们已经设计好了,所以这不是一个问题。或者我猜他们在环境pythonpath中将路径添加到他们的包中。你可以在你的系统范围的站点中添加路径。py?这肯定有效。这有点违反了我的限制A(我必须对每个文件都这样做),但这是某种标准做法吗?我无法想象其他人也没有这个问题。。。或者他们已经设计好了,所以这不是一个问题。或者我猜他们是在环境pythonpath中将路径添加到他们的包中。您可以在您的系统范围的site.py中添加路径吗?
import sys.path
sys.path.append('.')
import somemodule
import sys
dirname = os.path.dirname(os.path.abspath(somemodule.__file__))
sys.path.append(dirname)