我有一个用深奥的编程语言编写的命令行程序(foo
)。我想将此程序作为使用setuptools的现有python包的一部分进行分发。 foo
应该出现在用户的路径中,并且可以从命令行执行,就像distutil的scripts或setuptools'entry_points的行为一样。
我可以为每个平台交叉编译程序,然后为每个平台构建一个不同的egg,并使用特定于平台的二进制文件foo
。问题是,我不知道如何说服setuptools将二进制文件复制到目标系统上适合平台的位置。
例如,我尝试使用scripts
指令:
setup(
...
scripts=["foo"]
...
)
但似乎setuptools不喜欢带有非utf8数据的“脚本”。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcf in position 0: invalid continuation byte
我可以将它声明为资源,但不会将其放在用户的路径中。
如何将二进制命令行实用程序作为python包的一部分发送?
答案 0 :(得分:2)
我的解决方案如下:
foowrapper
。 foowrapper
包含foo
(但重命名为foo_bin
)和一个名为foo
的新脚本,内容如下:。
#!python
file = __file__
import os.path
cmd = os.path.join(os.path.dirname(__file__),"foo_bin")
import subprocess
subprocess.call([cmd] + sys.argv[1:])
setup(
...
package_data={
'foowrapper':['foo_bin']
},
packages=['foowrapper],
scripts=['foowrapper/foo']
...
)