gpt4 book ai didi

python-3.x - 在 setuptools 中分发二进制实用程序

转载 作者:行者123 更新时间:2023-12-03 18:38:24 26 4
gpt4 key购买 nike

我有一个用深奥的编程语言编写的命令行程序(foo)。我想将此程序作为使用 setuptools 的现有 python 包的一部分分发。 foo应该出现在用户的路径中并且可以从命令行执行,很像 distutil 的 scripts 的行为。或 setuptools 的 entry_points .

我可以为每个平台交叉编译程序,然后使用平台特定的二进制文件 foo 为每个平台构建不同的 egg。 .问题是,我不知道如何说服 setuptools 将二进制文件复制到目标系统上适合平台的位置。

例如,我尝试使用 scripts指示:

setup(
...
scripts=["foo"]
...
)

但似乎 setuptools 不喜欢带有非 utf8 数据的“脚本”。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcf in position 0: invalid continuation byte

我可以将其声明为资源,但这不会将其置于用户的路径中。

如何将二进制命令行实用程序作为 python 包的一部分提供?

最佳答案

我的解决方案如下:

  • 创建包装模块 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.py 以包含 foowrapper、foo 和 foo_bin

  • .
    setup(
    ...
    package_data={
    'foowrapper':['foo_bin']
    },
    packages=['foowrapper],
    scripts=['foowrapper/foo']
    ...
    )

    关于python-3.x - 在 setuptools 中分发二进制实用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24686838/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com