在具有相对从另一个目录导入的模块上运行Python

时间:2013-07-22 22:07:44

标签: python

假设在/path/to/foo下我有一个包含python模块的包:

/path/to/foo:
           | my_package
                        | __init__.py
                        | my_module.py

           | my_other_package
                        | __init__.py
                        | my_other_module.py

文件my_module.py执行my_other_module.py的相对导入,如下所示:

  from ..my_other_package import my_other_module

我知道我可以从shell中执行以下操作:

> cd /path/to/foo
> python -m my_package.my_module

但如果我不想更改当前目录怎么办?有没有办法从shell运行我的模块而不必更改PYTHONPATH

我尝试了以下内容:

python -m /path/to/foo/my_package.my_module

但这不起作用。我得到了:Import by filename is not supported

1 个答案:

答案 0 :(得分:1)

获取相对路径:

base_path = os.path.abspath('../my_other_package/') #or any relative directory

将此附加到系统路径(仅临时,将在执行后删除): sys.path.append(base_path)

导入该路径中需要的文件: import my_other_module.py

我相信你可能需要一个名为__init__.py的文件(其中没有任何内容),如果你想将文件导入import directory.file(如果我错了,请纠正我)。

This主题显示了替代方法。