2012-05-05 97 views
12

我想創建一個setup.py,它將我的文件安裝到自定義目錄中。我有一定的前綴,在這裏我想得到以下結果:python setup.py配置在自定義目錄中安裝文件

/my/prefix/ 
    bin/ 
    script.sh 
    libexec/ 
    one.py 
    two.py 
    ... 
    lib/pythonX.Y/site-packages/ 
    package/... 

我最初的項目如下:

/ 
    script.sh 
    one.py 
    two.py 
    ... 
    setup.py 
    package/... 
    __init__.py 
    ... 

什麼會實現,最好的方法是什麼?我希望能夠與像稍後進行安裝:

python setup.py install --prefix=/my/prefix 

我能得到「一攬子」很好地安裝在正確的目錄中的lib/pythonX.Y /站點包下--prefix是默認位置。但有沒有一種乾淨的方式來將script.sh變成「bin」和其他python文件到「libexec」中?我看到實現這一目標的唯一方法是手動將這些文件複製到我的setup.py腳本中。可能有一個更清潔和更標準的方法來做到這一點?

(編輯)

解決方案

我結束了setup.py這樣的:

setup(name='mylib', 
    scripts=['script.sh'], 
    data_files=[('libexec', ['one.py', 'two.py'])] 
) 

當然,你可以遍歷了所有的libexec Python文件,但我只有我需要的2-3個python文件。

(EDIT 2)

此外,我還可以有以下setup.cfg:

[install] 
prefix=/my/prefix 

,取而代之的python setup.py install --prefix=/my/prefix我可以這樣做:

python setup.py install 
+0

這裏有一些有用的文檔:https://docs.python.org/2/install/index.html#alternate-installation-unix-the-prefix-scheme,這裏是https://docs.python。 org/3/distutils/introduction.html – Pierz

回答

8

的腳本處理通過使用scripts參數來設置功能。對於libexec,您可以將它們視爲數據文件並使用數據選項。

setup(... 
    scripts=glob("bin/*"), 
    data_files=[(os.path.join(sys.prefix, 'libexec', 'mypackage'), glob("libexec/*"))], 
    ... 
) 

我不知道怎麼會用--prefix選項的工作,我從來沒有嘗試過。

+0

謝謝! data_files爲我做了。另一個問題,我可以有一個默認的「前綴」?如果用戶沒有指定一個,我想用我自己的(而不是python默認)。 – Ago

+1

您可以在setup.cfg文件中設置選項默認值。它位於.ini樣式選項文件中,具有區段和名稱 - 值對。命令行選項直接轉換爲那裏的選項(刪除'--'等)。 – Keith

+0

作品很有魅力,謝謝! – Ago

相關問題