python - 使用 pip 安装的本地包虽然显示在 pip 列表中,但无法导入
问题描述
从我之前使用 pip 安装的文件系统导入两个本地(自写)包时遇到问题。我正在使用一个virtualenv,我也验证它已被激活,即python
指向pip
virtualenv。这两个不同的包被组织在一个仓库中,如下所示:
├── .venv
│ └── ...
├── folder_a
│ ├── package_a
│ │ ├── __init__.py
│ │ ├── a.py
│ │ └── subpackage_same_name
│ │ └── ...
│ ├── pyproject.toml
│ ├── requirements.txt
│ └── setup.cfg
├── folder_b
│ ├── package_b
│ │ ├── __init__.py
│ │ ├── subpackage_b_exclusive
│ │ │ └── ...
│ │ ├── b.py
│ │ └── subpackage_same_name
│ │ └── ...
│ ├── pyproject.toml
│ ├── requirements.txt
│ ├── setup.cfg
│ └── tests
│ └── ...
我使用以下命令从上述树的根目录安装这两个包(激活了 virtualenv):
pip install ./folder_a
和
pip install ./folder_b
。
安装成功,包如图所示pip list
。但是,当我尝试导入package_a
时,a.py
我得到一个ModuleNotFoundError: No module named 'package_a'
.
我无法在这里找出问题,它是virtualenv(注意.venv
树中的)相对于包定义的位置吗?我在监督什么吗?任何帮助表示赞赏!
解决方案
该sys.path
变量告诉你 Python 在哪里寻找导入。在执行 import 语句之前检查它,您将看到您的模块是否在显示的文件夹之一中,或者您是否需要在模块名称之前添加额外的点分隔路径元素。
推荐阅读
- assembly - 为什么在 TRACE_IRQS_OFF 之前将 rax 设置为 -ENOSYS
- python - 如何从烧瓶中的 ajax POST 执行 ajax GET
- firebase - 如何调整 Firebase 存储中所有现有图像的大小?
- async-await - 从服务器返回的 gRPC 元数据仅在 C# 客户端使用异步调用时可用?
- css - 如何在谷歌地图上叠加两个菜单,一个在屏幕的每一侧?
- reactjs - 无法从 React 中的数组中删除项目
- reactjs - 无法在反应中映射异步数组
- callback - rtspclientsink 的 Gstreamer 管道信号
- date - SAS INPUT 语句中信息前面的冒号
- reinforcement-learning - 贝尔曼方程的版本