无法从父包导入子包 python
Unable to import child from parent package python
我目前正在 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
有人可以解释一下我做错了什么吗?谢谢你的时间。
您的 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)
修改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
。
我目前正在 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
有人可以解释一下我做错了什么吗?谢谢你的时间。
您的 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)
修改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
。