我正在尝试为我用Click开发的CLI工具创建一个安装程序。问题是,由于某种原因,安装程序中没有包括子模块,这会导致以下错误:
from modules.commands import modules
ModuleNotFoundError: No module named 'modules'
这是我的目录结构:
.
├── LICENSE
├── README.md
├── setup.py
├── src
│ ├── app_config
│ │ ├── __init__.py
│ │ └── configuration.py
│ └── commands
│ ├── __init__.py
│ ├── config
│ │ ├── __init__.py
│ │ └── commands.py
│ ├── modules
│ │ ├── __init__.py
│ │ └── commands.py
│ └── cli.py
└── tests
cli.py
引用在config
和modules
中创建的命令。当我直接运行cli.py
时,它可以正常工作。但是,无论我尝试什么模式来让setup.py
包含包,commands
中的子模块都不包括在内。
这是setup.py
的代码
setup(
name='cli',
version='0.1.0',
packages=find_packages(include=['src', 'src.*']),
install_requires=[
'Click'
],
entry_points={
'console_scripts': [
'cli = src.commands.cli:cli'
]
}
)
我已经检查了find_packages
-implementation,但是我没有发现我指定上面所写内容的方式有什么问题。我也尝试过硬编码所有的包,但这也不起作用。我也尝试过使用src/*
,因为它可能使用完整的文件,但这也不起作用。
编辑:的更多疑难解答
多亏了这个question,我才试着运行python -c "from setuptools import setup, find_packages; print(find_packages('src'))"
。根据输出,它找到所有子模块:
['app_config', 'commands', 'commands.config', 'commands.modules']
但是,当我更新我的设置以包含相同的值时,它会失败。
setup.py:
setup(
name='cli',
version='0.1.0',
packages=find_packages('src'),
install_requires=[
'Click'
],
entry_points={
'console_scripts': [
'cli = src.commands.cli:cli'
]
}
)
输出:
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 1
...
error: package directory 'app_config' does not exist
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
发布于 2022-03-20 21:30:37
我也有同样的问题。你的问题帮助我从这里找到答案:
我将graft src
添加到我的manifest.in中,我将( setup.cfg中的选项) packages = find:
更改为packages = find_namespace:
在我加入嫁接之前,我非常困惑。然后它可以在src的主目录下找到我的子包。
https://stackoverflow.com/questions/71231387
复制相似问题