python - 使用不同目录中的源构建 Python 包
问题描述
在构建源代码树如下所示的 python 包时:
src -\
+- module -\
<stuff>
+- setup.py
很清楚。
是否可以构建一个模块源不与 setup.py 位于同一位置的包?对于更具体的用例,模块的代码部分或完全在其他位置自动生成src
例如
src -\
+- setup.py
generated -\
module -\
<module code>
解决方案
package_dir
您可以通过使用参数来控制包所在的目录setup(...)
虽然它似乎确实构建了一个适当的源代码分发时package_dir
是一个以 开头的相对路径..
,但它似乎pip
会拒绝安装它——我建议改为将生成的代码嵌套在该src
目录中,然后使用package_dir
它来选择它。
这是一个将所有模块移动到子目录中的示例generated
:
setup(
name='mypkg',
package_dir={'': 'generated'},
packages=find_packages('generated'),
)
使用如下设置:
$ tree .
.
├── generated
│ ├── mod1
│ │ └── __init__.py
│ └── mod2
│ └── __init__.py
└── setup.py
这将使以下安装成功:import mod1; import mod2
如果你想让这些模块在不同的前缀下可用,你会这样做:
setup(
name='mypkg',
package_dir={'hello': 'generated'},
packages=[f'hello.{mod}' for mod in find_packages('generated')],
)
这将import hello.mod1; import hello.mod2
在安装后成功
推荐阅读
- javascript - 即使定义了字段,为什么我的谷歌位置附近搜索返回气氛和联系数据?
- javascript - Angular 的多个请求
- composer-php - 无法使用 composer 2.0 在 Drupal 8.9.6 上安装/更新模块
- c# - 错误 MSB1003:指定项目或解决方案文件。使用 azure 构建管道但找不到 csproj 文件
- tcp - ESXI 6.7 上的 TCP 连接重置
- sql - 我可以将最新更新的行放在顶部吗
- javascript - Sequelize:仅选择用户所在的聊天
- java - Mapbox 导航崩溃
- ios - 将 API 调用返回到 JSON 时出现 valueNotFound 错误
- node.js - 如何通过 Docker 集成容器化的 Web 组件(React)?