来自 PyPi 的包的 ModuleNotFoundError

ModuleNotFoundError with package from PyPi

我使用 twine 在 PyPi 上上传了一个包,一切顺利。 现在我正在尝试安装该包并将其导入脚本。

根据 pip,模块已经正确安装:

PS C:\Users\alber> pip install ethbotutils
Requirement already satisfied: ethbotutils in c:\users\alber\appdata\local\programs\python\python39\lib\site-packages (1.1)

但是当我尝试在脚本或 IDE 或 Python IDLE 中导入它时,我得到:

>>> import ethbotutils
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    import ethbotutils
ModuleNotFoundError: No module named 'ethbotutils'

这是pyproject.toml文件(保存在项目根目录):

[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"

这是 setup.py 文件(存储在包目录中):

from setuptools import setup

setup(
    name='ethbotutils',
    version=1.0,
    packages=["."],
    install_requires=["requests~=2.25.1", "PyYAML~=5.4.1"],
    python_requires=">=3.6"
)

编辑:

@a_guest 建议的内容似乎有效:如果我导入包中存在的脚本,如“bot_utils”一切正常,但当我尝试导入时它仍然无效整个包裹的名字。我该如何解决?

分布的 名称setupname 参数)决定了 distribution (or project) is identified within the Python ecosystem; this includes the Python Package Index 分布的位置在 URL https://pypi.org/project/<name>/.

这与分布包含的实际 package(s)setuppackages 参数)不同。这些软件包在安装发行版时可用(例如通过 pip)。

例如,如果 setup.py 文件包含以下规范

setup(
    name='foo',
    packages=['bar'],
    ...
)

然后这将创建一个名为 foodistribution,它安装一个名为 barpackage;即在执行 pip install foo 之后,可以通过 import bar 访问该分发(包)的内容。通常,发行版的名称和顶级包的名称应该一致,以避免与可能安装到同一虚拟环境中的其他发行版发生冲突(有关详细信息,请参阅 )。

对于 OP 的具体示例,这意味着 setup.py 文件应包含以下规范:

setup(
    name='ethbotutils',
    packages=['ethbotutils'],
    ...
)

为了使设置正常工作,所有相关的 Python 模块都需要放在本地文件夹 ethbotutils 中,该文件夹位于 setup.py 文件旁边。