首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Setuptools包发现

Setuptools包发现
EN

Stack Overflow用户
提问于 2022-06-24 07:18:50
回答 1查看 296关注 0票数 2

我的项目有下面的包树

代码语言:javascript
复制
└── 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文件,以便只安装basemypkg1包,排除mypkg2

我尝试过在包中提到['base','mypkg1'],但是没有起作用,也尝试过使用find_packages(),它只会显示mypkg1mypkg2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-24 22:15:38

由于复杂的代码基布局,有许多事情要处理。另外,我不知道为什么要在src/mypkg1中显示安装脚本--从那里调用它将找不到src之外的任何东西,因此您将没有机会包含base。在下面的示例中,我切换到包含srcbase dirs的根目录:

代码语言:javascript
复制
project_root
├── src/
├── base/
└── setup.py

包发现

由于base位于项目根下,因此将通过普通的find_packages调用来发现它:

代码语言:javascript
复制
>>> from setuptools import find_packages
>>> find_packages()
['base']

要在src下查找包,请通过where参数传递它:

代码语言:javascript
复制
>>> from setuptools import find_packages
>>> find_packages(where='src')
['mypkg1', 'mypkg2']

若要排除mypkg2,请通过exclude参数中的列表传递它:

代码语言:javascript
复制
>>> from setuptools import find_packages
>>> find_packages(where='src', exclude=['mypkg2'])
['mypkg1']

包结构映射和文件包含

使用收集的包调用setuptools.setup()只适用于base,因为mypkg1不在根级。你必须通过package_dir映射它的位置。

代码语言:javascript
复制
setup(
    ...,
    package_dir={'': 'src'},
)

但是,这指示setup()查找src中所有包的文件,这使得base下的文件不可找到。因此,必须显式地映射它:

代码语言:javascript
复制
setup(
    ...,
    package_dir={'': 'src', 'base': 'base'},
)

完成最小设置脚本

代码语言:javascript
复制
from setuptools import setup, find_packages

setup(
    name='...',
    version='...',
    packages=find_packages() + find_packages(where='src', exclude=['mypkg2']),
    package_dir={'': 'src', 'base': 'base'},
)

现在,当构建一个轮子时,这将产生以下文件布局:

代码语言:javascript
复制
  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.py
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72740329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档