ModuleNotFoundError:pip安装后没有名为<modulename>的模块

时间:2019-12-12 13:16:44

标签: python virtualenv setuptools

我在python软件包发行版中做了我的第一步。
不幸的是,从pip成功安装后,我有了ModuleNotFoundError

我的dirs布局非常简单:

maindir
   |- setup.py
   |- pysoft
         |- __init__.py
         |- main.py
         |- pylib.py

main.py:

import pylib


def main():
    print("main program")
    pylib.libfunc()


if __name__ == '__main__':
    main()

pylib.py:

def libfunc():
    print("lib func")

setup.py:

import setuptools


setuptools.setup(
    name='pysoft',
    version='0.0.21',
    author='als',
    author_email='als@gnail.com',
    description='deploy tester',
    py_modules=['pylib'],
    packages=setuptools.find_packages(),
    python_requires='>=3.6',
    entry_points={
        'console_scripts': [
            'pysoft = pysoft.main:main',
        ],
    },
)

我打包并上传到 test.pypi.org

python3 setup.py sdist bdist_wheel
python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*

我设置并启动新的virtualenv并安装我的软件包:

 python3 -m pip install -i https://test.pypi.org/simple/ pysoft

然后我尝试运行它,但出现错误:

pysoft 
Traceback (most recent call last):
  File "/home/fat/buff/tt/bin/pysoft", line 5, in <module>
    from pysoft.main import main
  File "/home/fat/buff/tt/lib/python3.6/site-packages/pysoft/main.py", line 1, in <module>
    import pylib
ModuleNotFoundError: No module named 'pylib'

您能找出我错了一步吗?

1 个答案:

答案 0 :(得分:1)

您执行import pylib就像说pylib是顶层模块或软件包一样。但这不是-它是包pysoft的子模块。为了正确导入,请执行以下操作:

from pysoft import pylib
py_modules=['pylib']中的

setup.py被忽略,因为setuptools找不到顶级pylib.py。但是packages=setuptools.find_packages()可以正常工作,并将pysoft软件包包括在发行版中。