无法在python包中导入子模块

时间:2018-02-28 21:17:53

标签: python python-packaging

我有一个python包,我可以单独使用就好了。但是当我用pip将它安装到site-packages时,我失去了导入子模块的能力。

我的包装如下:

mypackage
    mypackage
        __init__.py
        mymodule.py
        moduledir
            __init__.py
            mysubmodule.py
    setup.py

如果我在pythonpath上有包,我可以使用它。但是当我使用pip将它安装到site-packages时,我无法导入子模块。

from mypackage import mymodule              # works fine
from mypackage.moduledir import mysubmodule # ModuleNotFoundError: No module named when installed to site-packages, works fine when on pythonpath

这里发生了什么?如何更改它以便我可以导入子模块?

另外,我确定这在某个地方得到了解答,但我无法在Google或SO上找到它。我道歉,如果它是微不足道的,我只是在谷歌搜索错误的条款。

编辑:这是我的setup.py请求。

from setuptools import setup

setup(name='mypackage',
      version='0.1',
      description='mypackage',
      url='https://gitlab.com/ericksonla/mypackage',
      author='ericksonla',
      author_email='ericksonla@ericksonla.com',
      license='',
      packages=['mypackage'],
      install_requires=[],
      zip_safe=False)

1 个答案:

答案 0 :(得分:0)

我需要将子模块添加到setup.py中的包列表中:

# setup.py
from setuptools import setup

setup(name='mypackage',
      version='0.1',
      description='mypackage',
      url='https://gitlab.com/ericksonla/mypackage',
      author='ericksonla',
      author_email='ericksonla@ericksonla.com',
      license='',
      packages=['mypackage, 'mypackage.moduledir'],
      install_requires=[],
      zip_safe=False)

我仍然不太确定为什么我需要导入一个级别,但不能再进一步。