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

时间:2013-07-31 16:39:09

标签: python ironpython

我遇到了一些脚本问题,我编写了一些脚本来测试我编写的解析器。当使用当前工作目录作为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文件中的import语句是。

from _test.common import TestClass

在python场景中,我只获得附加到sys.path的MyPackage / parsers / _test目录,因此无法找到MyPackage。在IronPython场景中,MyPackage / parsers / _test目录和MyPackage /都在sys.path中。如果我从_test目录中调用测试,我可能得到相同的错误引用(它不知道MyPackage)。即使我将测试文件合并到_test目录中,我仍然会遇到此路径问题。

我应该注意,我刚测试过,如果我做了类似

的事情
import sys
import os
sys.path.append(os.getcwd())

它会正确加载。但我必须为每个文件执行此操作。

无论如何都要解决这种路径问题而不执行以下操作。

一个。在每个文件中附加sys.path的相对路径。

B中。附加PATH以包含MyPackage(我不希望我的包作为python“全局”系统路径的一部分)

非常感谢您的任何提示!

1 个答案:

答案 0 :(得分:1)

有两种选择:

  • 使用环境变量PYTHONPATH并包含。

  • 将其添加到程序开头的sys.path

import sys.path
sys.path.append('.')
  • 如果您需要动态导入相对路径,则可以始终执行类似
  • 的操作
import somemodule
import sys
dirname = os.path.dirname(os.path.abspath(somemodule.__file__))
sys.path.append(dirname)