【问题标题】:ModuleNotFoundError: No module named <modulename> after pip installModuleNotFoundError: pip install 后没有名为 <modulename> 的模块
【发布时间】:2020-04-05 21:34:38
【问题描述】:

我在 python 包分发中迈出了第一步。
不幸的是,从 pip 成功安装后我有ModuleNotFoundError

我的目录布局非常简单:

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'

你能找出我哪里走错了吗?

【问题讨论】:

  • 路径导出了吗?

标签: python virtualenv setuptools


【解决方案1】:

你做import pylib 好像说pylib 是一个顶级模块或包。但它不是——它是包pysoft 的子模块。为了正确导入:

from pysoft import pylib

setup.py 中的py_modules=['pylib'] 被忽略,因为setuptools 找不到顶级pylib.py。但是packages=setuptools.find_packages() 可以工作并将pysoft 包包含到发行版中。

【讨论】:

  • 是的,现在可以了,谢谢。但是如果我尝试在本地运行它 (python ./main.py) 我得到了错误:ModuleNotFoundError: No module named 'pysoft'
  • 本地运行时需要适配$PYTHONPATH。您的 main.py 不知道 pysoft/ 目录。最简单的修复方法是PYTHONPATH=.. ./main.py
猜你喜欢
  • 2019-06-09
  • 1970-01-01
  • 2021-10-18
  • 2020-06-15
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
相关资源
最近更新 更多