【问题标题】:How to fix a ModuleNotFoundError when packaging a Python app for PyPi为 PyPi 打包 Python 应用程序时如何修复 ModuleNotFoundError
【发布时间】:2021-01-31 22:50:01
【问题描述】:

我在尝试运行我的应用程序时遇到此错误,该应用程序是通过以下方式从 PyPi 下载的

$ python3 -m pip install --user speed-reader
$ speed-reader --help
Traceback (most recent call last):
  File "/home/h5l/.local/bin/speed-reader", line 5, in <module>
    from reader import main
ModuleNotFoundError: No module named 'reader'

我从来没有为 PyPi 打包过东西,所以我可能误解了他们的文档。

这是我的 setup.py

$ cat setup.py
import setuptools

with open("README.md", "r") as f:
    long_description = f.read()

setuptools.setup(
    name="speed-reader",
    version="1.0.3",
    author="h5law",
    author_email="h5law@pm.me",
    description="A speed reader implemented in Python",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/h5law/speed-reader",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent"
    ],
    python_requires='>=3.6',
    install_requires=["numpy", "click"],
    entry_points={
        'console_scripts': [
            'speed-reader = reader:main',
        ],
    },
)

我哪里出错了?我的目录结构如下:

reader/
 - LICENSE.txt
 - README.md
 - setup.py
 - requirements.txt
 - speed-reader/
    - __init__.py  [empty]
    - reader.py    [entry point main() exists]

问题是直接运行就可以了,所以肯定是包装没有问题?

$ python3 reader.py --help
Usage: reader.py [OPTIONS] PATH

Options:
  --version      Show the version and exit.
  --wpm INTEGER  Read at specified WPM, defaults to 160
  --help         Show this message and exit.

更新:

像这样安装包

$ git clone https://github.com/h5law/speed-reader
$ cd speed-reader
$ python3 -m pip install .

在不发生错误的情况下创建一个完全工作的包...

我们将不胜感激!

【问题讨论】:

    标签: python python-3.x pip pypi


    【解决方案1】:

    您正在使用packages=setuptools.find_packages(),这将在当前目录中找到模块。

    python 模块可以是*.py 文件,也可以是包含__init__.py 文件的目录。

    因此find_packages 仅查找speed-reader 包。如果你想在其中访问reader.py,你需要这样做:

    from speed_reader.reader import main
    

    【讨论】:

      猜你喜欢
      • 2021-04-07
      • 2012-07-15
      • 2019-11-05
      • 2016-04-01
      • 2021-09-30
      • 2019-06-06
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      相关资源
      最近更新 更多