首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“`ModuleNotFoundError:没有模块名”后为软件包安装

“`ModuleNotFoundError:没有模块名”后为软件包安装
EN

Stack Overflow用户
提问于 2021-12-08 15:42:54
回答 2查看 7.5K关注 0票数 3

我配置了一个包,用于在容器构建期间使用诗歌进行构建/安装。我不明白为什么poetry install说它安装了我的软件包,但却找不到。然而,poetry build后面跟着一个pip install的车轮工作得很好。如果包名与根文件夹相同,那么是否需要指定子包,或者如何使用poetry install使诗安装完整的包?我尝试过对pyproject.toml文件进行各种调整,包括设置packages

文件结构如下所示:

代码语言:javascript
运行
复制
.
└──  my_pkg
    ├── Dockerfile
    ├── pyproject.toml
    └── my_pkg
        ├── __init__.py
        └── app.py

pyproject.toml文件如下所示:

代码语言:javascript
运行
复制
[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"

问题是在运行poetry install之后没有安装包。

代码语言:javascript
运行
复制
%  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)

这导致找不到软件包:

代码语言:javascript
运行
复制
$ 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认为包已经安装了。

代码语言:javascript
运行
复制
$ 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时,似乎包含了正确的包。所有的.py文件也都显示在/usr/local/lib/python3.9/site-packages/my_pkg/下面。

代码语言:javascript
运行
复制
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
...
代码语言:javascript
运行
复制
$ 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
>>> 
EN

回答 2

Stack Overflow用户

发布于 2021-12-09 16:56:13

poetry install将包安装到一个venv中。您必须首先激活它,例如使用poetry shell。您也可以看看文档

票数 2
EN

Stack Overflow用户

发布于 2022-09-03 02:07:31

如果出于任何原因,在安装包时不创建虚拟环境确实需要诗歌,则可以添加以下内容:

代码语言:javascript
运行
复制
poetry config virtualenvs.create false
poetry install
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70277753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档