簡體   English   中英

Linux中的獨立Python應用程序

[英]Standalone Python applications in Linux

如何在Linux中分發獨立的Python應用程序?

我認為我可以理所當然地認為在任何現代發行版中都存在最近的Python解釋器。 問題是處理那些不屬於標准庫的庫,即wxPython,scipy,python cryptographic toolkit,reportlab等。

是否有一個可用的Linux副本,比方說,py2exe(順便說一下,我從未嘗試過)? 有一個免費的,開源的嗎?

創建deb(用於Debian派生的所有內容)和rpm(用於Fedora / SuSE)。 將正確的依賴項添加到包裝中,您可以合理地確定它將起作用。

您可以使用cx_Freeze執行此操作。 它就像py2exe(將解釋器和啟動腳本以及所有必需的庫和模塊捆綁在一起),但適用於Linux和Windows。

它從運行它的環境中收集依賴項,這意味着它們也需要適合目標。 如果您正在使用32位Debian構建並在另一個32位Debian上部署,那就沒問題了。 您可以通過在適當的環境(例如32位和64位chroot)中構建多個版本並分發適當的版本來處理32/64位差異。 如果你想要更通用的東西(比如在Debian上構建,在任何發行版上部署),那么這會變得有點模糊,具體取決於你的依賴關系。

如果您正在進行相當簡單的分發(即您知道您的構建環境和部署環境相似),那么這就避免了相當復雜的rpm / deb / egg / etc步驟(使用cx_Freeze非常簡單,特別是如果你是熟悉py2exe)。 如果沒有,那么從你自己的依賴安裝程序到deb / rpm / egg / etc構建的任何東西都可以工作,這取決於你想要做多少工作,你想要提供所需版本的靈活性,以及​​依賴性。

您可能希望查看setuptools中的依賴項聲明。 這可能提供一種方法來確保正確的包在環境中可用,或者可以由具有適當權限的人安裝。

您無法以分布中立格式輕松完成此操作。 唯一可靠的依賴關系跟蹤機制構建在分發的包管理系統中,並且將隨分發而變化。 你將有效地為fedora做deb,為ubuntu和debian做debs等。

Py2exe在Windows上運行正常。 它使用所有必需的DLL和啟動程序的python解釋器的包裝器構建一個發行版。 安裝相當簡單 - 只需將其放在目錄中 - 因此為它創建一個msi文件是微不足道的。

Setuptools對我來說太過分了,因為我的程序使用非常有限,所以這里是我自己開發的替代品。

我捆綁了包含所有先決條件的“第三方”目錄,並使用site.addsitedir,因此無需全局安裝。

# program startup code
import os
import sys
import site
path = os.path.abspath(os.path.dirname(__file__))
ver = 'python%d.%d' % sys.version_info[:2]
thirdparty = os.path.join(path, 'third-party', 'lib', ver, 'site-packages')
site.addsitedir(thirdparty)

我的大多數先決條件都有setup.py安裝程序。 每個捆綁模塊都有自己的“安裝”過程,因此任何自定義的東西(例如./configure)都可以自動運行。 我的安裝腳本在安裝過程中運行此makefile。

# sample third-party/Makefile
PYTHON_VER = `python -c "import sys; \
        print 'python%d.%d' % sys.version_info[:2]"`
PYTHON_PATH = lib/$(PYTHON_VER)/site-packages
MODS = egenix-mx-base-3.0.0 # etc

.PHONY: all init clean realclean $(MODS)
all: $(MODS)
$(MODS): init
init:
    mkdir -p bin
    mkdir -p $(PYTHON_PATH)
clean:
    rm -rf $(MODS)
realclean: clean
    rm -rf bin
    rm -rf lib

egenix-mx-base-3.0.0:
    tar xzf $@.tar.gz
    cd $@ && python setup.py install --prefix=..
    rm -rf $@

標准的python方法是創建一個python“Egg”。

您可以查看本教程有關setuptools的此頁面

我認為你可以相當安全地在大多數現代Linux發行版上獲得理所當然的python支持 - 對於那些沒有它的人,只要給出一個合理的錯誤信息,用戶應該能夠自己研究如何獲得它(你可以使用)一個簡單的bash啟動腳本):

#!/bin/bash
if [ -e /usr/bin/python ]
then
    echo "Python found!"
else
    echo "Python missing!"
fi

不。

就不同的設置而言,Python出了名的不穩定。 部署python應用程序的唯一理智方法是將您依賴的整個解釋器和庫捆綁到您的代碼中。 這很可能會奏效。

更新2019年:我堅持這一點。 Virtualenv是一種將圖書館和口譯員打包在一起的方式。 Tox是一種測試解釋器/依賴矩陣的測試工具。 Docker是一種廣泛使用的方式,然后部署捆綁包。

暫無
暫無

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

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