我有我认为是pip的东西,在把它作为正式问题提交之前,我想再次确认这并不是我的错误。如果不是窃听器,我希望能解释一下我做错了什么。
我有一个这样的项目结构:
project/
setup.py
project_src/
__init__.py
...
common_utils/
utils_src/
__init__.py
...
我希望能够:
import project_src
从"project/project_src“导入代码(这不是问题,我只想更全面)import utils_src
从“project/ path _utils/utils_src”导入代码(注意,这会从包路径名中剥离"common_utils“文件夹)为了做到这一点,根级"setup.py“看起来如下(缩写):
# setup.py
import setuptools
setuptools.setup(
...,
packages=['project_src', 'utils_src'],
package_dir={
'project_src': 'project_src',
'utils_src': 'common_utils/utils_src',
},
...,
)
这是我的问题。然后,当我通过CL作为pip install project/
在本地安装这个包时,我可以打开一个解释器并成功地运行import project_src
和import utils_src
。但是如果我通过pip install -e project/
安装,import project_src
可以工作,但是import utils_src
会触发ModuleNotFoundError
错误。(这是一个巨大的痛苦,因为我依赖于使用-e
标志进行开发。)
再次,请告诉我,如果这似乎是一个错误,或如果这是我的错误。
发布于 2021-01-11 12:49:34
原来这是一个长期存在的问题:pypa/setuptools #230:开发模式不尊重src结构
谢谢@sinoroc对这个答案的提示“注释”
发布于 2021-01-11 09:52:07
不是pip
中的一个bug,是你的错误。您希望将common_utils/
目录用作包的父目录,但希望将utils_src
作为包内的包。所以改变你的setup.py
package_dir={
'project_src': 'project_src',
'utils_src': 'common_utils',
},
使用此utils_src
将作为顶级包安装,因此您可以这样做。
import utils_src
PS。他们说这不适用
pip install -e
我还没有验证谣言。
https://stackoverflow.com/questions/65671333
复制