是否可以将python及其必要的库导出到独立于环境的文件中?

问题描述:

我有一个python脚本,它使用keras和tensorflow库,这在每台机器上设置都非常耗时。是否有可能将我的python脚本以及keras和tensorflow库导出到像java projects - > .jar这样的文件中,这样我就不需要每次移动到新机器时都设置库了?是否可以将python及其必要的库导出到独立于环境的文件中?

+0

'.jar'是正常的'.zip'文件。 – furas

+0

@furas我想你是在说'.tar'? –

+0

@BingGan,它实际上是一个'zip'文件。 –

不是文件,而是一个文件夹。使用virtualenv(https://virtualenv.pypa.io/en/stable/)。你可以指定一个Python版本,它会在文件夹中安装它:

virtualenv -p /usr/bin/python2.6 <path/to/new/virtualenv/> 

然后可以使用画中画安装软件包和模块的具体环境,然后压缩该文件夹上下左右移动。

Python 3包含a tool called zipapp,它允许您从Python项目中构建单个存档,捆绑在所有(或某些)依赖项中。 该工具仅与Python 3捆绑在一起,但生成的归档文件可以与您所定位的任何版本的Python> = 2.6一起使用。

假如你有src/你的所有的源文件,包括提到的张量流动图书馆:

$ python3 -m zipapp -o yourapp.pyz -m "your.entry.point.module:main_function" src/ 

-m标志允许你指定一个模块里面的函数,用: separed,这将在运行.pyz文件时执行。关于运行它,这只是一个问题:

$ python ./yourapp.pyz 

再次,您将需要Python> = 2.6才能使其工作。

如果你的目标UNIX平台上,你还可以添加一个家当:

$ echo "#! /usr/bin/python" > yourapp2.pyz 
$ cat yourapp.pyz >> yourapp2.pyz 
$ chmod +x yourapp2.pyz 

,这样就可以运行该文件:

$ ./yourapp2.pyz 

作为一个方面说明,一个.pyz是什么多于.zip文件。你可以自己创建一个,不需要zipapp,只需在顶层包含一个__main__.py文件。这将是你的包的入口点。

这在一般 有关部署Python应用程序,这是不平凡的,特别是对于复杂的项目,但如果唯一的问题是处理库安装常见的解决方案是:

包括在你的项目的文本文件(通常需求。TXT),其中包括磁带库,并且需要

可以使用

pip freeze > requirements.txt 

,但你或许应该删除已安装在过去的这一点,但实际上并不在目标机器上运行使用

库版本:

pip install -r requirements.txt 

建议使用虚拟env设置环境,但是使用虚拟env从一台机器复制它作为一个diffe租一个不是很安全或可扩展(只会用于相同的操作系统,相同的Python版本和相同的目录结构)