2017-07-17 126 views
0

我正在跨不同的Linux和BSD發行版移植python庫 此庫使用setuptools打包。如何使用setuptools修復python代碼中的路徑來構建一個可移植的包?

的問題是,該代碼使得在系統中的其他文件的引用,例如:

/bin/my-cmd 
/etc/default/my-config.cfg 

但是取決於Linux或BSD發行版,路徑是不同的,例如:

/usr/local/bin/my-cmd 
/etc/my-config.cfg 

所以我想知道是否有一種方法可以在setup.py中編寫一個預安裝腳本來修復路徑(用於前綴和配置文件),這樣我可以使我的軟件包變得可移植。

我希望能夠在源代碼中寫一些模式,例如:

%%PREFIX%%/bin/my-cmd 

而且在setup.py更換模式%%PREFIX%%它安裝之前的包,這可能嗎?

感謝

回答

0

要在編譯時間解決這個問題,我們可以在setup.py自定義生成步驟,通過在項目中的所有Python文件迭代,並更換圖案,但我發現最好的解決方法是修復在運行時路徑中使用全局變量:

在我__init__.py我:

​​

然後我就可以通過使用引用文件位置:

my_cmd_path = PREFIX + '/bin/my-cmd' 
0

嘗試,這可能是它會幫助你。 __file__將獲得當前位置。

import os 

os.path.join(os.path.dirname(__file__), 'bin/my-cmd') 
+0

但我可以在setup.py代碼中的任何位置添加這個嗎?或者setup.py有一個特殊的地方來放這些腳本?另外,如何檢索安裝軟件包的前綴或操作系統,以便我可以知道要替換哪條路徑? –

+0

你的setup.py位於哪裏? 'bin/my-cmd'? – Simplans

+0

我不確定我是否理解這個問題。 setup.py是這個項目的一部分:https://github.com/helen-fornazier/compute-image-packages/tree/development –

相關問題