簡體   English   中英

`ModuleNotFoundError: No module named` 為 package 安裝詩歌后

[英]`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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM