Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决Python和IronPython中的sys.path差异_Python_Ironpython - Fatal编程技术网

如何解决Python和IronPython中的sys.path差异

如何解决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目录中调用脚本

我在编写测试解析器的脚本时遇到了路径问题。在使用当前工作目录作为sys.path的一部分时,Python(27和3)的行为似乎与IronPython不同。因此,我的内部包路径不起作用

这是我的包裹布局

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)