从任何目录调用Python自制包

时间:2014-03-31 17:16:54

标签: python module package

我有以下目录结构:

mydir/
   MyTask1/
      job1.py
      MyPackage/
         __init__.py
        cool_code.py
      MyTask1_1/
        job2.py
    MyTask3/
       job3.py

我创建的包名为MyPackage__init__.py只包含文档字符串。 我想要做的是来自job2.pyjob3.py,我可以通过以下方式调用模块

# job2.py or job3.py
#!/usr/bin/python
from MyPackage import cool_code

我应该修改和添加什么才能实现?

3 个答案:

答案 0 :(得分:1)

您可以修改sys.path以扩展模块搜索路径,例如

import sys
sys.path.insert(0,'/path/to/mydir/MyTask1')
from MyPackage import cool_code

答案 1 :(得分:0)

来自job2.py:

PROJ_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
if not PROJ_ROOT in sys.path:
    sys.path.append(PROJ_ROOT)
from mydir.MyTask1.MyPackage import cool_code

来自job3.py:

PROJ_ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
if not PROJ_ROOT in sys.path:
    sys.path.append(PROJ_ROOT)
from mydir.MyTask3 import cool_code

答案 2 :(得分:0)

您可以定义相对于__init__.py的模块路径并定义模块结构。您可以在此处找到示例:https://docs.python.org/2/tutorial/modules.html#packages

如果您想加载时间:

from MyPackage import cool_code

您可以在此处定义的__all__中使用__init__.pyhttps://docs.python.org/2/tutorial/modules.html#importing-from-a-package