[英]How can I bundle a Python script with module dependencies into a package or .exe file?
[英]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將代碼推送到中央存儲庫並將其拉到您的服務器,而無需構建任何包。 Fabric和Ansible是兩個可以幫助您自動化部署過程的工具。 (例如,遠程運行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.