我有一个包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相同的文件夹中。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")