[英]bundling/executing python script + modules to a remote machine
我研究了其他python模块分发问题。 我的需求有些不同(我认为!,我是python newbie +)
我有一堆需要在远程计算机上执行的python脚本。 目标环境如下所示:
所以我想做的是:
这可能吗? 还是有更好的方法呢? 我想我正在寻找的是将第三方模块“重新定位”到脚本目录中。
提前致谢!
远程机器彼此相同吗? 而且,如果可以,您是否可以设置与远程计算机实际上相同的开发计算机?
如果是这样, virtualenv
几乎可以做到这一点。 在开发机器上创建virtualenv
,使用pip
的virtualenv
副本在其中安装任何第三方模块,在其中构建脚本,然后将整个环境复制到每台远程机器。
有三件事使它可能变得不平凡:
virtualenv
,则需要执行以下操作之一:
--relocatable
环境中通过只是工作。 请参阅“使环境可重定位”的文档部分。 virtualenv
本身捆绑在一起,然后在每台计算机上pip install --user virtualenv
(如果他们甚至没有pip
,请在此之前执行几个步骤)。 这将使用户帐户处于永久更改状态。 (但幸运的是,您的用户帐户将被删除,所以谁在乎?) libxml2
for lxml
),则virtualenv
对此无济于事。 实际上,您将需要C库几乎完全相同(相同路径,兼容版本)。 其他三种选择:
virtualenv
问题,例如安装libxml2
),那么将.egg / .tgz /任何文件捆绑到第三方模块中可能会更容易,然后编写一个脚本,对每个脚本执行pip install --user
等操作,然后就完成了。 py2app
, py2exe
, cx_freeze
等并不那么复杂,尤其是在简单的情况下,拥有一个cx_freeze
可执行文件进行复制比拥有一个明确的环境更加容易。 zc.buildout
是一种非常灵活且易于管理的工具,可以完成三种选择中的任何一种。 主要缺点是学习曲线要陡得多。 您可以使用virtualenv为您的项目创建一个独立的环境。 这可以容纳您自己的脚本以及任何依赖库。 然后,您可以使环境可重定位( --relocatable
),并将其同步到目标计算机,激活它并运行脚本。
如果这些计算机确实具有网络访问权限(不是Internet,而是局域网),则您也可以将virtualenv放在共享位置并从那里激活。
看起来像这样:
virtualenv --no-site-packages portable_proj
cd portable_proj/
source bin/activate
# install some deps
pip install xyz
virtualenv --relocatable .
现在portable_proj
可以disted到其他机器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.