簡體   English   中英

將 python 腳本和依賴項捆綁到一個文件中

[英]Bundle python script and dependencies into a single file

我有一些腳本有自己的一些函數的副本,所以我將這些函數提取到一個模塊中,並讓腳本導入函數。 這些腳本將被復制到一堆 linux 服務器並執行。 當腳本獨立運行時,我只需將文件復制到服務器並執行“python”。

我有一個中央管理服務器,可以在不同的服務器上復制和運行腳本。

我已經閱讀了一些關於 python 雞蛋的書,但可以使用一些關於方法的建議。 我今天做的方法是復制並簡單地運行python腳本。 由於這工作正常,我在想也許有一種方法可以將腳本本身與它們所依賴的(內部)模塊捆綁在一起,將捆綁包復制到服務器並執行它們。 不明白為什么我需要使用“pip”安裝任何東西。

現在,你們會推薦什么樣的設置? 我應該在本地計算機上構建雞蛋,然后讓管理服務器將雞蛋文件復制到服務器上嗎? 我更願意從管理服務器復制服務器需要的所有內容,而不是讓服務器自己拉下依賴項,這樣我就不必在所有防火牆上打更多洞。 由於雞蛋通常需要拉低依賴關系,也許雞蛋不是要走的路?

我的大多數服務器都運行 python 2.6,但我確實有一些運行 python 2.4 和 3.2。

問候, 肯尼斯

您可能需要考慮查看 Twitter 的 PEX 庫,它可以從 python 包創建可執行文件: https : //pex.readthedocs.org/en/latest/whatispex.html

.pex 文件只是精心構造的 zip 文件,帶有 #!/usr/bin/env python 和特殊的__main.py__

2016 年更新wagon幫助構建具有離線安裝依賴項的車輪包。


對於簡單的項目,將所有源代碼放在一個文件夾中並將其作為一個整體復制就足夠了。 您可以使用git將代碼推送到中央存儲庫並將其拉到您的服務器,而無需構建任何包。 FabricAnsible是兩個可以幫助您自動化部署過程的工具。 (例如,遠程運行git pull並刪除所有pyc文件)。

如果您在項目之間共享依賴項,則pip輪子是雞蛋的現代替代品:

您可以創建一個簡單的包,其中包含您希望安裝使用的所有依賴項。

 $ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX) $ pip wheel -r requirements.txt --wheel-dir=$tempdir $ cwd=`pwd` $ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)

獲得捆綁包后,您可以使用以下命令卸載它:

 $ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX) $ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2) $ pip install --force-reinstall --ignore-installed --upgrade --no-index --use-wheel --no-deps $tempdir/*

(來自pip 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM