2014-07-10 18 views
0

我有一個以深奧編程語言編寫的命令行程序(foo)。我想分發這個程序作爲使用setuptools的現有python包的一部分。 foo應該出現在用戶的路徑中,並且可以從命令行執行,就像distutil的scripts或setuptools'entry_points的行爲一樣。在setuptools中分發二進制實用程序

我可以爲每個平臺交叉編譯程序,然後用平臺特定的二進制碼foo爲每個平臺構建一個不同的蛋。問題是,我不知道如何說服setuptools將二進制文件複製到目標系統上適合平臺的位置。

例如,我嘗試使用scripts指令:

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

但它似乎setuptools的不喜歡「腳本」非UTF8數據。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcf in position 0: invalid continuation byte 

我可以聲明它是一種資源,但不會將它放在用戶的路徑中。

如何將二進制命令行實用程序作爲python包的一部分運送?

回答

1

我的解決辦法如下:

  • 創建的封裝模塊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'] 
    ... 
)