我正在尝试使用 构建一个 python 轮setuptools。该包需要包含两个文件:
mymodule.py- 与以下目录相同的 python 模块setup.pymyjar.jar- 存在于我的包目录之外的 java .jar 文件我正在使用 构建我的包python3 setup.py bdist_wheel。
如果我setup()这样调用:
setup(
name="mypkg",
py_modules=["mymodule"],
data_files=[('jars', ['../target/scala-2.11/myjar.jar'])]
)
Run Code Online (Sandbox Code Playgroud)
然后myjar.jar确实成功地包含在 .whl 中(到目前为止还不错),但是当我pip install mypkg将罐子放在/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'}
)
Run Code Online (Sandbox Code Playgroud)
或者
setup(
name="mypkg",
py_modules=["mymodule"],
package_data={'jars': ['../target/scala-2.11/myjar.jar']}
)
Run Code Online (Sandbox Code Playgroud)
那么myjar.jar根本不包含在 .whl 中。我尝试复制myjar.jar到同一目录并更改setup.py为:
setup(
name="mypkg",
py_modules=["mymodule"],
package_data={'jars': 'myjar.jar'}
)
Run Code Online (Sandbox Code Playgroud)
或者
setup(
name="mypkg",
py_modules=["mymodule"],
package_data={'jars': ['myjar.jar']}
)
Run Code Online (Sandbox Code Playgroud)
但仍然myjar.jar没有包含在 .whl 中。
几个小时以来我一直在为这件事抓狂,这就是我来这里的原因。
我读过无数关于此的帖子:
它建议data_files、package_data和include_package_data=True/或使用Manifest.in文件的不同组合,但我仍然无法按照我想要的方式工作,所以我在这里希望有人可以建议我做错了什么。
数据文件(在这种情况下myjar.jar)实际上应该是包数据文件,因此它们应该是 Python 包的一部分。因此,在父目录中包含此类文件会使事情变得更加复杂,但可能并非不可能。让我们从一个更简单的例子开始。我相信像下面这样的东西应该有效......
项目目录结构:
\n\nMyProject\n\xe2\x94\x9c MANIFEST.in\n\xe2\x94\x9c mymodule.py\n\xe2\x94\x9c setup.py\n\xe2\x94\x94 myjars\n \xe2\x94\x9c __init__.py\n \xe2\x94\x94 myjar.jar\nRun Code Online (Sandbox Code Playgroud)\n\nMANIFEST.in:
recursive-include myjars *.jar\nRun Code Online (Sandbox Code Playgroud)\n\nsetup.py:
#!/usr/bin/env python3\n\nimport setuptools\n\nsetuptools.setup(\n name=\'MyProject\',\n version=\'1.2.3\',\n #\n include_package_data=True,\n packages=[\'myjars\'],\n py_modules=["mymodule"],\n)\nRun Code Online (Sandbox Code Playgroud)\n\nmyjars/__init__.py可能不是绝对必要的,但我相信最好拥有它。与往常一样,空__init__.py文件就足够了。
(这假设该文件在构建源代码分发myjars/myjar.jar之前就存在。) sdist
至于处理父目录中的数据文件,我的建议是在调用之前简单地复制(或符号链接)这些文件setup.py,可能作为 shell 脚本或类似内容的一部分。可能有一些方法可以将复制作为中自定义setuptoolssetup.py命令的一部分,但在我看来,这不值得付出努力,而且实际上这不是setup.py工作的一部分。
| 归档时间: |
|
| 查看次数: |
5083 次 |
| 最近记录: |