python - 使用 setuptools 在 Python 包中包含额外文件
问题描述
我正在尝试使用setuptools
. 该包需要包含两个文件:
mymodule.py
- 与同一目录中的 python 模块setup.py
myjar.jar
- 一个存在于我的包目录之外的 java .jar 文件
我正在使用python3 setup.py bdist_wheel
.
如果我setup()
这样打电话:
setup(
name="mypkg",
py_modules=["mymodule"],
data_files=[('jars', ['../target/scala-2.11/myjar.jar'])]
)
然后myjar.jar
确实成功包含在 .whl 中(到目前为止很好)但是当我pip install mypkg
将 jar 放在/usr/local/myjar.jar
(这有点解释为什么)这根本不是我想要的时,我希望它存在于同一个地方mymodule.py
,即/usr/local/lib/python3.7/site-packages/
如果我setup.py
改为
setup(
name="mypkg",
py_modules=["mymodule"],
package_data={'jars': '../target/scala-2.11/myjar.jar'}
)
或者
setup(
name="mypkg",
py_modules=["mymodule"],
package_data={'jars': ['../target/scala-2.11/myjar.jar']}
)
然后myjar.jar
根本不会包含在.whl 中。我尝试复制myjar.jar
到同一目录并更改setup.py
为:
setup(
name="mypkg",
py_modules=["mymodule"],
package_data={'jars': 'myjar.jar'}
)
或者
setup(
name="mypkg",
py_modules=["mymodule"],
package_data={'jars': ['myjar.jar']}
)
但仍然myjar.jar
没有包含在 .whl 中。
我已经为此扯了几个小时的头发,这就是我在这里的原因。
我已经阅读了无数关于此的 SO 帖子:
- 如何在 setuptools/distribute 中包含包数据?
- MANIFEST.in 在“python setup.py install”上被忽略 - 没有安装数据文件?
- 如何将其他文件添加到轮子?
- setuptools:在包外添加其他文件
这建议了,和/或文件的不同组合data_files
,但我仍然无法按照我的意愿工作,所以我在这里希望有人能告诉我我做错了什么。package_data
include_package_data=True
Manifest.in
解决方案
数据文件(在这种情况下myjar.jar
)实际上应该是包数据文件,因此它们应该是 Python 包的一部分。因此,在父目录中包含此类文件会使事情变得更加复杂,但可能并非不可能。所以让我们从一个更简单的例子开始。我相信像下面这样的东西应该工作......
项目目录结构:
MyProject
├ MANIFEST.in
├ mymodule.py
├ setup.py
└ myjars
├ __init__.py
└ myjar.jar
MANIFEST.in
:
recursive-include myjars *.jar
setup.py
:
#!/usr/bin/env python3
import setuptools
setuptools.setup(
name='MyProject',
version='1.2.3',
#
include_package_data=True,
packages=['myjars'],
py_modules=["mymodule"],
)
myjars/__init__.py
可能不是绝对必要的,但我相信拥有它会更好。和往常一样,一个空__init__.py
文件就足够好了。
(这假定该myjars/myjar.jar
文件在构建源分发之前就存在。) sdist
至于处理父目录中的数据文件,我的建议是在调用之前简单地复制(或符号链接)这些文件setup.py
,可能作为 shell 脚本的一部分或类似的东西。可能有一些方法可以将复制作为自定义setuptools命令的一部分setup.py
,但在我看来,这不值得付出努力,实际上这不是setup.py
's 工作的一部分。
推荐阅读
- c - 为什么我在串行终端仿真器上收到额外的字符?& 避免他们?
- r - 如何在 R 中重塑我的数据框(转置,基于第一行名称的分组)?
- reactjs - 使用共享反应库在同一页面中呈现多个 webpack 入口点
- typescript - 需要帮助修复或抑制此 tslint 错误:TS2742
- sql - 如何在子查询上使用聚合函数?
- ios - Alamofire+Combine:如何从 AFError 中获取自定义错误类型
- kubernetes - 使用 kubernetes hostPath 时未在容器内获取已安装的主机文件的内容
- java - 如何设置 sbt 以使用 java 14 预览功能
- java - 如何将数组值添加到第二个组合框模型项中,从第一个组合框选定项中获取数组名称?
- python - 无法使用opencv从图像制作视频