python - 如何在 python wheel 中打包 perl 文件
问题描述
我们为一个包含 python 和 perl 脚本集合的包创建了一个 pip 轮文件。由于 python 打包只会将 python 文件添加到 wheel 文件中,因此打包 perl 文件的最佳方式也是如此。
这是我的项目结构
.
|____myproject
| |____logging.ini
| |____utils.py
| |____myperlscript.pl
| |____config.py
| |____version.py
| |____scripta.py
| |____scriptb.py
| |____scriptc.py
| |______init__.py
|____test
| |____test_scripts.py
|______init__.py
|____MANIFEST.in
|____README.md
|____setup.py
|____.gitignore
|____Jenkinsfile
解决方案
如果您当前正在setuptools
为setup.py
您的项目使用,并使用python setup.py bdist_wheel
用作生成.whl
文件的方法,请将以下行添加到MANIFEST.in
项目根目录中已经存在的文件中。
recursive-include myproject *
自然地,替换将包含目标脚本(或任何其他文件)myproject
的实际顶级目录。.pl
作为一个演示,如果你setup.py
的写法大致如下:
from setuptools import setup
from setuptools import find_packages
setup(
name='myproject',
version='0.0.0',
description='demo package',
long_description=open('README.md').read(),
classifiers=[
'Programming Language :: Python',
],
packages=find_packages(),
include_package_data=True,
zip_safe=False,
)
运行python setup.py bdist_wheel
将显示如下所示的输出:
...
adding 'myproject/__init__.py'
adding 'myproject/config.py'
adding 'myproject/logging.ini'
adding 'myproject/myperlscript.pl'
adding 'myproject/scripta.py'
adding 'myproject/utils.py'
adding 'myproject/version.py'
adding 'test/__init__.py'
...
这些文件被打包在.whl
:
$ unzip -t dist/myproject-0.0.0-py3-none-any.whl
Archive: dist/myproject-0.0.0-py3-none-any.whl
testing: myproject/__init__.py OK
testing: myproject/config.py OK
testing: myproject/logging.ini OK
testing: myproject/myperlscript.pl OK
...
.whl
在新环境中安装生成的文件:
$ pip install -U myproject-0.0.0-py3-none-any.whl
Processing myproject-0.0.0-py3-none-any.whl
Installing collected packages: myproject
Successfully installed myproject-0.0.0
$ ls env/lib/python3.6/site-packages/myproject/
config.py logging.ini __pycache__ utils.py
__init__.py myperlscript.pl scripta.py version.py
另请注意,如果MANIFEST.in
不需要该方法,package_data={'': ['*']},
则调用的包含参数setup
也应使其适用于最新版本的setuptools
.
进一步的附录:该setuptools
包实际上有一个MANIFEST.in
包含此特定语法的,但仅限于他们想要包含的文件的特定文件扩展名。尽管有一些指南/文档可能会提出其他建议,但这显然是一个受支持的选项。实际上,这是Python 默认附带的核心distutils
模块提供的功能。相关问题:
推荐阅读
- reactjs - 如何在 Typescript 的上下文中使用 React Hooks?
- php - Laravel 会话数据无法立即访问
- javascript - 将 GeoJson 导入 GoogleMap
- javascript - 如何检查用户是否未定义
- python - 遍历 df 行并根据 if 语句执行计算
- python - 类型错误:+ 不支持的操作数类型:添加 numpy 数组时的“生成器”和“生成器”
- sml - SML:定义一个数组
- c - 如何在数组中找到坐标为 (x1, y1) 和 (x2, y2) 的两点之间的直线长度?
- android - 我们可以使用 android ML Kit Image Labeling 来检测产品吗
- fish - 大括号扩展作为标志参数对