无法从父包python导入子进程

时间:2016-08-17 11:27:20

标签: python packages

我目前正在python中编写需要单元测试的Web应用程序,但每当我尝试导入另一个父目录中的子模块时,我都会收到以下错误:

$ python my_package/tests/main.py
Traceback (most recent call last):
  File "my_package/tests/test.py", line 1, in <module>
    from my_package.core.main import hello
ImportError: No module named my_package.core.main

文件:my_package / core / main.py

hello = "Hello"

文件:my_package / test / test.py

from my_package.core.main import hello

print(hello, "world!")

我的目录结构:

$ tree
. 
└── my_package
    ├── __init__.py
    ├── core
    │   ├── __init__.py
    │   └── main.py
    └── tests
        ├── __init__.py
        └── test.py

有人可以解释一下我做错了什么吗?谢谢你的时间。

2 个答案:

答案 0 :(得分:4)

修改sys.path considered an anti-pattern 。如果您希望所有子包都可以使用您的包,那么最好使用setup.py开发模式。 在项目的根目录中创建setup.py

from setuptools import setup

setup(
    name="you_project",
    version="0.0.0",
    packages=['my_package', ],
    install_requires=['requirement1', 'requirement2'],
)

然后运行:

$python setup.py develop

在此之后,您将能够从Python环境中的任何位置导入my_packege

答案 1 :(得分:0)

您的my_package不在PYTHONPATH中。在test.py的顶部添加以下内容。请注意,test.py位置的任何更改都会影响package_path

from os.path import dirname, abspath
import sys
package_path = dirname(dirname(abspath(__file__)))
sys.path.append(package_path)