![](/img/trans.png)
[英]Conda install package ModuleNotFoundError: No module named 'conda'
[英]`ModuleNotFoundError: No module named` after poetry install for package
我有一个 package 配置为在容器构建期间使用诗歌进行构建/安装。 我不明白为什么poetry install
说它已经安装了我的 package,但没有找到。 然而, poetry build
,然后是pip install
车轮工作正常。 如果 package 名称与根文件夹的文件夹名称相同,是否需要指定子包,或者如何让诗歌安装完整的 package 使用poetry install
? 我尝试了对pyproject.toml
文件的各种调整,包括设置packages
。
文件结构如下所示:
.
└── my_pkg
├── Dockerfile
├── pyproject.toml
└── my_pkg
├── __init__.py
└── app.py
pyproject.toml
文件如下所示:
[tool.poetry]
name = "my_pkg"
version = "0.1.0"
description = "My Package"
[tool.poetry.dependencies]
python = ">=3.8,<3.11"
...
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
问题是 package 在运行之后没有安装poetry install
。
% poetry install
Installing dependencies from lock file
Package operations: 70 installs, 4 updates, 0 removals
• Installing pyasn1 (0.4.8)
• Installing cachetools (4.2.4)
• Updating charset-normalizer (2.0.9 -> 2.0.8)
• Installing frozenlist (1.2.0)
• Installing multidict (5.2.0)
...
Installing the current project: my_pkg (0.1.0)
这导致找不到 package:
$ python
Python 3.9.9 (main, Dec 3 2021, 01:42:21)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import my_pkg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_pkg'
如果我尝试查找实际文件,我找不到它们,但pip
认为 package 已安装。
$ find /usr/local -name my_pkg\*
/usr/local/lib/python3.9/site-packages/my_pkg.pth
/usr/local/lib/python3.9/site-packages/my_pkg-0.1.0.dist-info
$ ls -la /usr/local/lib/python3.9/site-packages/my_pkg-0.1.0.dist-info
total 32
drwxr-xr-x 2 root root 4096 Dec 8 15:32 .
drwxr-xr-x 1 root root 12288 Dec 8 15:32 ..
-rw-r--r-- 1 root root 6 Dec 8 15:32 INSTALLER
-rw-r--r-- 1 root root 1535 Dec 8 15:32 METADATA
-rw-r--r-- 1 root root 454 Dec 8 15:32 RECORD
$ cat /usr/local/lib/python3.9/site-packages/my_pkg.pth
/app/my_pkg
$ pip freeze | grep my_pkg
my_pkg==0.1.0
在这里, /app/my_pkg
似乎是执行poetry install
时代码所在的临时路径,但这不会在生成的容器中持续存在。
但是,当使用poetry build && pip install dist/my_pkg*.whl
时,似乎包含正确的 package。 所有.py
文件也显示在/usr/local/lib/python3.9/site-packages/my_pkg/
下。
Building my_pkg (0.1.0)
- Building sdist
- Built my_pkg-0.1.0.tar.gz
- Building wheel
- Built my_pkg-0.1.0-py3-none-any.whl
Processing ./dist/my_pkg-0.1.0-py3-none-any.whl
...
$ python
Python 3.9.9 (main, Dec 3 2021, 01:42:21)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import my_pkg
>>>
poetry install
将 package 安装到 venv 中。 您必须先激活它,例如使用poetry shell
。 也看看文档。
如果出于某种原因您确实需要在安装软件包时不创建虚拟环境,您可以添加以下内容:
poetry config virtualenvs.create false
poetry install
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.