2017-07-08 73 views
1

我剛剛完成了一段漂亮的代碼。它使用了一些未預先安裝在python中的模塊。現在的問題是,要讓用戶運行,必須安裝系統所需的所有模塊。
我該如何從這種痛苦中拯救用戶?
有沒有什麼辦法可以只分析正在使用的模塊中的那些函數,並以某種方式將它們與我寫的代碼打包在一起?
我現在在做的事情之一就是編寫一個輔助外殼腳本來減輕用戶的工作量。但是再次安裝模塊可能會給各種系統帶來痛苦和錯誤。我無法處理。 請給我一些建議。
謝謝模塊依賴的python代碼在沒有模塊的機器上運行

編輯1:我有點擔心安裝整個庫的複雜性。我正在爲python(後臺在C/C++中實現)的cv2模塊工作,我不能要求用戶在一天結束時安裝整個庫,我只是使用一堆函數它。
PS:我花了幾個小時來安裝OpenCV

+0

編寫setup.py以包含所有依賴項?所以所有模塊都可以安裝在一個命令中。 –

回答

0

假設你有一個模塊XYZ

通常你會安裝,使用PIP

pip install xyz 

出於某種原因,你沒有訪問在它想要運行的環境中這樣做,所以改爲從github克隆/下載xyz存儲庫到您的應用程序中(最好作爲git子模塊)

xyz repo將prob幹練地看這樣的事情。

XYZ repo (dir) 
- xyz (dir) <-- this is where the actual module is 
- readme.md 
- setup.py 

現在你的應用程序目錄看起來是這樣的:

My app (dir) 
- XYZ repo (dir) 
- __init__.py 
- myapp.py 

爲了能夠在myapp.py進口某某,你需要一個符號鏈接添加到的XYZ回購

ln -s XYZ\ Repo/xyz xyz 
模塊目錄

您的應用程序現在看起來是這樣的:

My app (dir) 
- XYZ repo (dir) 
- xyz 
- __init__.py 
- myapp.py 

你現在可以在代碼中導入xyz。免責聲明:這隻適用於純python庫,如果它具有c依賴性,它們將需要在安裝期間構建,並且您需要訪問pip或至少自己運行構建腳本。 還必須以相同的方式安裝xyz軟件包的任何依賴項

+0

謝謝。但我並不擔心安裝整個圖書館的複雜性。我正在爲python(後臺在C/C++中實現)的cv2模塊工作,我不能要求用戶在一天結束時安裝整個庫,我只是使用一堆函數它。 –

+0

您需要使用類似'cx_freeze'的東西,這會將整個腳本和所有依賴關係打包成一個小文件。完全自足。我已經使用cx來爲Windows機器製作.exe的。不知道還有什麼可以運行的包,但確定任何東西。嘗試谷歌「移植」蟒蛇,看看發生了什麼 – Joe