无法导入 pip 安装的模块

Pip-installed module cannot be imported

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

不幸的是,我收到了 ModuleNotFoundError。 我在 Windows 10,运行 python 3.9.6。 我已经尝试了我在 Internet 上看到的所有内容,删除了 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

您的包名为“src”,因此安装的模块目前应该可以导入

from src import sqlcontroller

import src.sqlcontroller as sqlcontroller

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

你的文件结构有误

这是我的包裹的示例

(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,您可能会导入你的包