[英]Why is pip editable install causing issue with subpackages?
我在為我的 package 使用可編輯安裝時遇到問題。 在我的 package 中,我有三個子包,如 setup.py 文件中所示。 如果我使用pip install.
,但如果我使用pip install -e.
那么我在嘗試運行 CLI relctl
時會收到以下錯誤:
Traceback (most recent call last):
File "/Users/my_username/.virtualenvs/rawp3/bin/relctl", line 11, in <module>
load_entry_point('tech-control', 'console_scripts', 'relctl')()
File "/Users/my_username/.virtualenvs/rawp3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 490, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/Users/my_username/.virtualenvs/rawp3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2859, in load_entry_point
return ep.load()
File "/Users/my_username/.virtualenvs/rawp3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2450, in load
return self.resolve()
File "/Users/my_username/.virtualenvs/rawp3/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2456, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
ModuleNotFoundError: No module named 'tech_control.cli'
經過進一步檢查,我發現我無法導入任何子包。 例如,以下將失敗: import tech_control.boards
失敗: ModuleNotFoundError: No module named 'tech_control.boards'
tech_control/
├── __init__.py
├── boards
│ ├── __init__.py
│ ├── board_base.py
│ ├── tech8ch.py
│ └── wiring.py
├── cli
│ ├── __init__.py
│ └── cli.py
└── setup.py
from setuptools import setup
setup(
name="tech_control",
version="0.1.0",
description="CLI for Tech Boards",
packages=["tech_control", "tech_control.boards", "tech_control.cli"],
package_dir={
"tech_control": "",
"tech_control.boards": "boards",
"tech_control.cli": "cli"},
install_requires=["pyusb"],
entry_points={
"console_scripts": [
"relctl = tech_control.cli.cli:main"
]
},
)
為什么我的可編輯安裝阻止我訪問子包?
據我所知,可編輯安裝不適用於目錄結構的更改,就像package_dir
所做的那樣。
但是,更改根目錄是可以的:
package_dir={'': 'path/to/root'}
參考資料:
旁白:
目前正在努力為可編輯裝置進行新設計。 與重寫目錄結構的組合很可能不在 scope 中,因為它可能不是一個經常出現的用例,以至於值得額外的代碼復雜性來支持它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.