Python 3.x 为什么pip可编辑安装会导致子包问题? 问题

Python 3.x 为什么pip可编辑安装会导致子包问题? 问题,python-3.x,pip,python-import,Python 3.x,Pip,Python Import,我的软件包在使用可编辑安装时遇到问题。在我的包中有三个子包,如setup.py文件所示。如果使用pip install.安装,一切都正常,但是如果使用pip install-e.安装,则在尝试运行CLIrelctl时,会出现以下错误: Traceback (most recent call last): File "/Users/my_username/.virtualenvs/rawp3/bin/relctl", line 11, in <module> load_en

我的软件包在使用可编辑安装时遇到问题。在我的包中有三个子包,如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'
Setup.py
从设置工具导入设置
设置(
name=“技术控制”,
version=“0.1.0”,
description=“用于技术板的CLI”,
软件包=[“tech_control”、“tech_control.boards”、“tech_control.cli”],
包裹目录={
“技术控制”:“,
“技术控制板”:“板”,
“tech_control.cli”:“cli”},
安装_requires=[“pyusb”],
入境点={
“控制台脚本”:[
“relctl=tech\u control.cli.cli:main”
]
},
)
问题 为什么我的可编辑安装会阻止我访问子包?

据我所知,可编辑安装不会像使用
软件包目录那样,对目录结构进行更改

更改根目录是可以的,但是:

package_dir={'': 'path/to/root'}
参考资料

旁白

目前正在为可编辑安装进行新的设计。最有可能的是,与目录结构重写的结合可能不在范围之内,因为它可能不是一个经常出现的用例,不值得额外的代码复杂性来支持它


我认为可编辑安装无法像
package\u dir
那样处理目录结构中的更改。您可以尝试类似
package\u dir={'':''}
的方法,但不能保证它会工作,它可能会出错,无论如何,我不推荐它。有没有一种方法可以改变我的目录结构,这样它就可以处理它,并且可以维护我设置的名称空间?例如,从tech_control.boards import X导入
,什么都不想。这是一个不寻常的目录结构,这是公平的。我按照你的建议去掉了package_dir,效果很好。你的评论就是答案。
package_dir={'': 'path/to/root'}