是否可以将python及其必需的库导出到与环境无关的文件中?

时间:2017-01-24 01:06:06

标签: python python-3.x tensorflow keras

我有一个使用keras和tensorflow库的python脚本,这在每台机器上设置都非常耗时。是否可以将我的python脚本以及keras和tensorflow库导出到像java projects这样的文件中 - > .jar这样我每次搬到新机器时都不需要设置库吗?

3 个答案:

答案 0 :(得分:4)

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

假设您拥有src/中的所有源文件,包括提到的Tensor Flow库:

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

-m标志允许您指定一个模块及其中的一个函数,与:分开,将在您运行.pyz文件时执行。关于运行它,它只是一个问题:

$ python ./yourapp.pyz

同样,你需要Python> = 2.6才能实现这一点。

如果您的目标是unix平台,您可能还会添加一个shebang:

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

以便您可以将文件运行为:

$ ./yourapp2.pyz

作为旁注,.pyz只不过是一个.zip文件。您可以在没有zipapp的情况下自己创建一个,只需在顶级包含__main__.py文件即可。那将是你的包的入口点。

答案 1 :(得分:2)

不是文件,而是文件夹。使用virtualenv(https://virtualenv.pypa.io/en/stable/)。您可以指定python版本,它将把它安装在文件夹中:

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

然后,您可以使用pip为该特定环境安装软件包和模块,然后将该文件夹压缩并移动它。

答案 2 :(得分:1)

这与部署python应用程序有关 这不是一件容易的事,特别是对于复杂的项目,但如果唯一的问题是处理库安装,常见的解决方案是:

在项目中包含一个文本文件(通常是requirements.txt),其中包含您需要的库和版本

你可以使用

pip freeze > requirements.txt

但您应该删除过去安装但未实际使用的库

在目标机器上运行:

pip install -r requirements.txt
建议使用虚拟环境来设置环境,但是使用来自一台计算机的虚拟环境并将其复制到另一台计算机并不是非常安全或可扩展(仅适用于相同的操作系统,相同python版本,和相同的目录结构)