“ModuleNotFoundError:在安装诗歌包后没有名为”的模块

mik*_*e_b 14 python python-poetry

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

\n

文件结构如下所示:

\n
.\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80  my_pkg\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 my_pkg\n \xc2\xa0\xc2\xa0  \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0  \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 app.py\n\n
Run Code Online (Sandbox Code Playgroud)\n

pyproject.toml文件如下所示:

\n
[tool.poetry]\nname = "my_pkg"\nversion = "0.1.0"\ndescription = "My Package"\n\n[tool.poetry.dependencies]\npython = ">=3.8,<3.11"\n...\n\n[build-system]\nrequires = ["poetry-core>=1.0.0"]\nbuild-backend = "poetry.core.masonry.api"\n
Run Code Online (Sandbox Code Playgroud)\n

问题是运行后未安装该软件包poetry install

\n
%  poetry install\nInstalling dependencies from lock file\n\nPackage operations: 70 installs, 4 updates, 0 removals\n\n   \xe2\x80\xa2 Installing pyasn1 (0.4.8)\n   \xe2\x80\xa2 Installing cachetools (4.2.4)\n   \xe2\x80\xa2 Updating charset-normalizer (2.0.9 -> 2.0.8)\n   \xe2\x80\xa2 Installing frozenlist (1.2.0)\n   \xe2\x80\xa2 Installing multidict (5.2.0)\n...\n\n\nInstalling the current project: my_pkg (0.1.0)\n\n
Run Code Online (Sandbox Code Playgroud)\n

这会导致找不到包:

\n
$ python\nPython 3.9.9 (main, Dec  3 2021, 01:42:21) \n[GCC 8.3.0] on linux\nType "help", "copyright", "credits" or "license" for more information.\n>>> import my_pkg\nTraceback (most recent call last):\n  File "<stdin>", line 1, in <module>\nModuleNotFoundError: No module named 'my_pkg'\n
Run Code Online (Sandbox Code Playgroud)\n

如果我尝试查找实际文件,我找不到它们,但pip认为该包已安装。

\n
$ find /usr/local -name my_pkg\\*\n/usr/local/lib/python3.9/site-packages/my_pkg.pth\n/usr/local/lib/python3.9/site-packages/my_pkg-0.1.0.dist-info\n$ ls -la /usr/local/lib/python3.9/site-packages/my_pkg-0.1.0.dist-info\ntotal 32\ndrwxr-xr-x 2 root root  4096 Dec  8 15:32 .\ndrwxr-xr-x 1 root root 12288 Dec  8 15:32 ..\n-rw-r--r-- 1 root root     6 Dec  8 15:32 INSTALLER\n-rw-r--r-- 1 root root  1535 Dec  8 15:32 METADATA\n-rw-r--r-- 1 root root   454 Dec  8 15:32 RECORD\n$ cat /usr/local/lib/python3.9/site-packages/my_pkg.pth \n/app/my_pkg\n$ pip freeze | grep my_pkg\nmy_pkg==0.1.0\n
Run Code Online (Sandbox Code Playgroud)\n

在这里,/app/my_pkg似乎是执行 时代码所在的临时路径poetry install,但这不会保留在生成的容器中。

\n

但是,使用时poetry build && pip install dist/my_pkg*.whl,似乎包含了正确的包。所有文件也.py显示在下面。/usr/local/lib/python3.9/site-packages/my_pkg/

\n
Building my_pkg (0.1.0)\n  - Building sdist\n  - Built my_pkg-0.1.0.tar.gz\n  - Building wheel\n  - Built my_pkg-0.1.0-py3-none-any.whl\nProcessing ./dist/my_pkg-0.1.0-py3-none-any.whl\n...\n
Run Code Online (Sandbox Code Playgroud)\n
$ python\nPython 3.9.9 (main, Dec  3 2021, 01:42:21) \n[GCC 8.3.0] on linux\nType "help", "copyright", "credits" or "license" for more information.\n>>> import my_pkg\n>>> \n
Run Code Online (Sandbox Code Playgroud)\n

fin*_*mer 14

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


Cas*_*sio 5

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

poetry config virtualenvs.create false
poetry install
Run Code Online (Sandbox Code Playgroud)

  • 嗨@Cassio,我也做到了。我有一个容器文件来下载诗歌并安装软件包,但是当我进入容器并运行 python 脚本时。除非我在容器内再次安装诗歌,否则我一直得不到模块。我想念什么? (4认同)