Linux中的独立Python应用程序

Fed*_*oni 29 python linux

如何在Linux中分发独立的Python应用程序?

我想我可以理所当然地认为在任何现代发行版中都有最近的Python解释器.问题是处理那些不属于标准库的库,即wxPython,scipy,python cryptographic toolkit,reportlab等.

是否有一个可用的Linux副本,比方说,py2exe(顺便说一下,我从未尝试过)?有一个免费的,开源的吗?

Tor*_*rek 22

创建deb(用于Debian派生的所有内容)和rpm(用于Fedora/SuSE).将正确的依赖项添加到包装中,您可以合理地确定它将起作用.

  • 这个端到端的任何好的参考? (7认同)

Ton*_*yer 11

您可以使用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构建的任何东西都可以工作,这取决于你想要做多少工作,你想要提供所需版本的灵活性,以及​​依赖性.


S.L*_*ott 9

您可能希望查看setuptools中的依赖项声明.这可能提供一种方法来确保正确的包在环境中可用,或者可以由具有适当权限的人安装.


Con*_*lls 7

您无法以分布中立格式轻松完成此操作.唯一可靠的依赖关系跟踪机制构建在分发的包管理系统中,并且将随分发而变化.你将有效地为fedora做deb,为ubuntu和debian做debs等.

Py2exe在Windows上运行正常.它使用所有必需的DLL和启动程序的python解释器的包装器构建一个发行版.安装相当简单 - 只需将其放在目录中 - 因此为它创建一个msi文件是微不足道的.


HUA*_*UAH 7

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)
Run Code Online (Sandbox Code Playgroud)

我的大多数先决条件都有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 $@
Run Code Online (Sandbox Code Playgroud)


Mar*_*cin -9

没有。

Python 在不同的设置方面是出了名的不稳定。部署 python 应用程序的唯一明智的方法是随代码一起提供您所依赖的整个解释器和库包。这很可能会起作用。

2019 年更新:我坚持这一点。Virtualenv 是将库和解释器打包在一起的一种方式。Tox 是一个测试解释器/依赖矩阵的测试工具。Docker 是一种广泛使用的捆绑包部署方式。

  • 这不是我的经历。当然,你可能会错误地设置第三方库,甚至可能会错误地安装 python,但一般来说,我在使用标准 python 程序时从来没有遇到过问题。当然,当您使用新功能时迁移到以前的版本除外:)。也许您正在考虑 Java(tm)? (2认同)