来自PyPi的包的ModuleNotFoundError

2024-09-29 23:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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”,那么一切都能正常工作,但当我尝试按其名称导入整个包时,它仍然不能正常工作。我怎样才能解决这个问题


Tags: installpip文件inimportbuild脚本packages
1条回答
网友
1楼 · 发布于 2024-09-29 23:23:47

分布的名称setupname参数)决定了在Python生态系统中如何识别distribution(或项目);这包括Python Package Index,其中分发将位于URL https://pypi.org/project/<name>/

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

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

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

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

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

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

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

相关问题 更多 >

    热门问题