【问题标题】:Relative import in Python package does not seem to workPython包中的相对导入似乎不起作用
【发布时间】:2020-02-17 05:10:07
【问题描述】:

我有一个结构如下的包:

mypackage/
  util/
    __init__.py
    a.py
  b.py
  __init__.py
  setup.py

__init__.py 文件为空。在b.py 中有一个util/a.py 的导入:

from .util import a

包中包含的测试运行良好。但是,当我安装包并尝试在另一个项目中使用它时,from mypackage import b,我得到:

File [...] , in <module>
    from mypackage import b
File "/usr/local/lib/python3.7/site-packages/mypackage-0.0.1-py3.7.egg/mypackage/b.py", line 1, in <module>
    from .util import a
ModuleNotFoundError: No module named 'mypackage.util'

编辑 1

setup.py 看起来像这样:

from setuptools import setup

setup(name="mypackage",
      version="0.0.1",
      description="My package",
      packages=["mypackage"])

【问题讨论】:

  • 你是如何安装包的?你能包括你的setup 脚本吗?
  • @Brian 编辑了我的帖子,使用python3 setup.py install 安装。

标签: python python-3.x package


【解决方案1】:

您必须在对setup 的调用中包含该子包,否则将无法安装:

setup(
    ...
    packages=[
        'mypackage',
        'mypackage.util',
    ]
)

您也可以使用setuptools.find_packages 来自动化这个过程:

from setuptools import find_packages

setup(..., packages=find_packages())

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 1970-01-01
    • 2022-06-15
    • 2018-01-08
    • 2014-10-31
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    相关资源
    最近更新 更多