Python包安装脚本安装二进制可执行文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python包安装脚本安装二进制可执行文件相关的知识,希望对你有一定的参考价值。
我有一个包awesomepkg
与setup.py
。当用户运行awesometool
时,我想在命令行中安装二进制可执行文件pip install awesomepkg
以及软件包本身。我为awesometool
编译了不同的操作系统版本,它位于bin/
旁边的setup.py
文件夹中。
但是,我找不到配置setup.py
的好方法。我尝试过以下方法:
- 在
scripts=[]
中使用setup()
关键字。不幸的是,“可执行文件”必须是python脚本。 - 所以我尝试使用
os.system('bin/awesometool')
将二进制文件包装在python脚本中进行委托。它也失败了因为包装脚本被pip复制到其他地方,所以它不知道相对路径bin/awesometool
在哪里。 - 另一个可能的解决方案是
data_files
关键字。但是,由于某种原因,数据文件不会复制到site_packages
安装目录,即使运行python setup.py bdist_wheel
说它们已被复制。
答案
我自己也遇到过这个问题。我的解决方案是三倍。
- 我添加了该程序,例如
awesometool
,我的包结构,所以我可以通过package_data
关键字添加它:package_data={'awesomepkg': ['awesometool']}
。这导致它在安装期间实际上被复制到与主init.py相同的文件夹中。 - 我创建了一个类似于步骤2的python脚本。但是,我首先导入
awesomepkg
而不是相对路径,并使用awesomepkg.__path__
获取包的安装文件夹的绝对路径。这看起来像:import awesomepkg import subprocess as sp import sys path = awesomepkg.__path__[0] command = path + "/awesometool" sp.call([command] + sys.argv)
我也使用subprocess而不是system,但结果应该是相同的。 - 我将此脚本添加到
scripts
的setup()
关键字中
另一答案
从一个包内可以使用
import os
command = os.path.join(os.path.dirname(__file__), "awesometool")
以上是关于Python包安装脚本安装二进制可执行文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在可执行文件附近生成 dsym 文件,而不是在捆绑包之外,最好没有安装后脚本?