Python包安装脚本安装二进制可执行文件

问题描述 投票:4回答:2

我有一个包awesomepkgsetup.py。当用户运行awesometool时,我想在命令行中安装二进制可执行文件pip install awesomepkg以及软件包本身。我为awesometool编译了不同的操作系统版本,它位于bin/旁边的setup.py文件夹中。

但是,我找不到配置setup.py的好方法。我尝试过以下方法:

  1. scripts=[]中使用setup()关键字。不幸的是,“可执行文件”必须是python脚本。
  2. 所以我尝试使用os.system('bin/awesometool')将二进制文件包装在python脚本中进行委托。它也失败了因为包装脚本被pip复制到其他地方,所以它不知道相对路径bin/awesometool在哪里。
  3. 另一个可能的解决方案是data_files关键字。但是,由于某种原因,数据文件不会复制到site_packages安装目录,即使运行python setup.py bdist_wheel说它们已被复制。

参考:https://docs.python.org/3/distutils/setupscript.html

python pip setuptools
2个回答
4
投票

我自己也遇到过这个问题。我的解决方案是三倍。

  1. 我添加了该程序,例如awesometool,我的包结构,所以我可以通过package_data关键字添加它:package_data={'awesomepkg': ['awesometool']}。这导致它在安装期间实际上被复制到与主init.py相同的文件夹中。
  2. 我创建了一个类似于步骤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,但结果应该是相同的。
  3. 我将此脚本添加到scriptssetup()关键字中

0
投票

从一个包内可以使用

import os
command = os.path.join(os.path.dirname(__file__), "awesometool")
© www.soinside.com 2019 - 2024. All rights reserved.