我的项目有下面的包树
└── src
| ├── mypkg1
| │ ├── module1.py
| │ ├── module2.py
| │ └── __init__.py
| | |-- setup.py
| | |__ requirements.py
| └── mypkg2
| ├── module1.py
| └── __init__.p
|
|---- base
| |----- init.py
| |----- module1.py 注: src和base处于相同的水平。
如何配置setup.py文件,以便只安装base和mypkg1包,排除mypkg2。
我尝试过在包中提到['base','mypkg1'],但是没有起作用,也尝试过使用find_packages(),它只会显示mypkg1和mypkg2。
发布于 2022-06-24 22:15:38
由于复杂的代码基布局,有许多事情要处理。另外,我不知道为什么要在src/mypkg1中显示安装脚本--从那里调用它将找不到src之外的任何东西,因此您将没有机会包含base。在下面的示例中,我切换到包含src和base dirs的根目录:
project_root
├── src/
├── base/
└── setup.py包发现
由于base位于项目根下,因此将通过普通的find_packages调用来发现它:
>>> from setuptools import find_packages
>>> find_packages()
['base']要在src下查找包,请通过where参数传递它:
>>> from setuptools import find_packages
>>> find_packages(where='src')
['mypkg1', 'mypkg2']若要排除mypkg2,请通过exclude参数中的列表传递它:
>>> from setuptools import find_packages
>>> find_packages(where='src', exclude=['mypkg2'])
['mypkg1']包结构映射和文件包含
使用收集的包调用setuptools.setup()只适用于base,因为mypkg1不在根级。你必须通过package_dir映射它的位置。
setup(
...,
package_dir={'': 'src'},
)但是,这指示setup()查找src中所有包的文件,这使得base下的文件不可找到。因此,必须显式地映射它:
setup(
...,
package_dir={'': 'src', 'base': 'base'},
)完成最小设置脚本
from setuptools import setup, find_packages
setup(
name='...',
version='...',
packages=find_packages() + find_packages(where='src', exclude=['mypkg2']),
package_dir={'': 'src', 'base': 'base'},
)现在,当构建一个轮子时,这将产生以下文件布局:
Length Date Time Name
--------- ---------- ----- ----
0 06-24-2022 21:55 base/__init__.py
0 06-24-2022 21:55 base/module1.py
0 06-24-2022 21:54 mypkg1/__init__.py
0 06-24-2022 21:54 mypkg1/module1.py
0 06-24-2022 21:54 mypkg1/module2.pyhttps://stackoverflow.com/questions/72740329
复制相似问题