【问题标题】:Pip-installed module cannot be importedpip安装的模块无法导入
【发布时间】:2021-11-01 05:55:51
【问题描述】:

我今天上传了我的第一个 PyPi 包。 我花了一段时间才弄清楚一切,但我做到了,现在我正在尝试将其导入到我的另一个项目中。

不幸的是,我收到了 ModuleNotFoundError。 我在 Windows 10 上,运行 python 3.9.6。 我已经尝试了我在互联网上看到的所有内容,删除了 venv 并重新创建了它,将包重新上传到 PyPi,使用python -m pip install sqlcontroller 甚至使用./venv/Scripts/python.exe -m pip install sqlcontroller 安装它。 我会尽量在下面提供我能提供的所有信息。

PyPi 包: https://pypi.org/project/sqlcontroller/

在 Github 上: https://github.com/RedKnight91/sqlcontroller

(venv) PS C:\Users\mikec\Documents\Python\binance-trading-bot-evaluator> python -m pip install sqlcontroller --no-cache-dir --upgrade 
Requirement already satisfied: sqlcontroller in c:\users\mikec\documents\python\binance-trading-bot-evaluator\venv\lib\site-packages (0.0.2)

import sqlcontroller 结果:

Traceback (most recent call last):
  File "c:\Users\mikec\Documents\Python\binance-trading-bot-evaluator\src\main.py", line 2, in <module>
    from sqlcontroller import SqlController
ModuleNotFoundError: No module named 'sqlcontroller'

pip show 输出

(venv) PS C:\Users\mikec\Documents\Python\binance-trading-bot-evaluator> python -m pip show sqlcontroller --files
Name: sqlcontroller
Version: 0.0.2
Summary: Controller class to handle sqlite3 databases.
Home-page: https://github.com/RedKnight91/sqlcontroller
Author: Michael Cazzarolli
Author-email: mikecazzarolli@gmail.com
License: UNKNOWN
Location: c:\users\mikec\documents\python\binance-trading-bot-evaluator\venv\lib\site-packages
Requires:
Required-by:
Files:
  sqlcontroller-0.0.2.dist-info\INSTALLER
  sqlcontroller-0.0.2.dist-info\LICENSE
  sqlcontroller-0.0.2.dist-info\METADATA
  sqlcontroller-0.0.2.dist-info\RECORD
  sqlcontroller-0.0.2.dist-info\REQUESTED
  sqlcontroller-0.0.2.dist-info\WHEEL
  sqlcontroller-0.0.2.dist-info\top_level.txt
  src\__init__.py
  src\__pycache__\__init__.cpython-39.pyc
  src\__pycache__\sqlcontroller.cpython-39.pyc
  src\sqlcontroller.py
  tests\__init__.py
  tests\__pycache__\__init__.cpython-39.pyc
  tests\__pycache__\conftest.cpython-39.pyc
  tests\__pycache__\test_sqlcontroller.cpython-39.pyc
  tests\conftest.py
  tests\test_sqlcontroller.py

where python 没有给出 venv 的输出:

(venv) PS C:\Users\mikec\Documents\Python\binance-trading-bot-evaluator> where python
(venv) PS C:\Users\mikec\Documents\Python\binance-trading-bot-evaluator> 

但它确实来自外部:

C:\Users\mikec>where python
C:\Users\mikec\AppData\Local\Programs\Python\Python39\python.exe

pip freeze

(venv) PS C:\Users\mikec\Documents\Python\binance-trading-bot-evaluator> pip freeze
sqlcontroller==0.0.2

【问题讨论】:

标签: python pip pypi python-packaging


【解决方案1】:

你的文件结构有误

这是我的包裹的外观示例

(venv) PS D:\Python\thebot> pip show bdbf --files
Name: bdbf
Author: Bertik23
Author-email: bertikxxiii@gmail.com
License: UNKNOWN
Location: d:\python\thebot\venv\lib\site-packages
Requires: discord.py
Required-by:
Files:
  bdbf-1.1.2.dist-info\INSTALLER
  bdbf-1.1.2.dist-info\LICENSE
  bdbf-1.1.2.dist-info\METADATA
  bdbf-1.1.2.dist-info\top_level.txt
  bdbf\__init__.py
  bdbf\__pycache__\__init__.cpython-39.pyc
  bdbf\__pycache__\bdbf.cpython-39.pyc
  bdbf\__pycache__\exceptions.cpython-39.pyc
  bdbf\__pycache__\functions.cpython-39.pyc
  bdbf\__pycache__\main.cpython-39.pyc
  bdbf\bdbf.py
  bdbf\exceptions.py
  bdbf\functions.py
  bdbf\main.py

如你所见,所有的 .py 文件都在 bdbf 文件夹中,但你的文件在 src 中,这不是你必须导入的名称,所以如果你这样做import src,你可能会导入你的包

【讨论】:

  • 谢谢!像魅力一样工作,我更正了包名
【解决方案2】:

你的包被称为“src”,所以安装的模块应该是当前可以导入的

from src import sqlcontroller

import src.sqlcontroller as sqlcontroller

但是,这个包装很差。您应该将顶级包命名为sqlcontroller,而不是src,并且您根本不应该打包tests 子目录。

【讨论】:

  • 谢谢!我修复了包名(更改为 sqlcontroller),我怎样才能只打包它?这是我的 setup.cfg [options] packages = find: python_requires = &gt;=3.6 我尝试使用 'package_dir' 但没有成功
  • @RedKnight91 如果要使用 src 布局,则需要指定“位置”。这里展示了如何做到这一点:setuptools.readthedocs.io/en/latest/userguide/…
  • 我尝试用 'sqlcontroller' 替换两个 'src' 但它不包含任何模块
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 2021-05-19
  • 2018-06-13
  • 1970-01-01
相关资源
最近更新 更多