我想在无法访问internet的生产服务器上部署python环境。
我发现了Python Anaconda发行版,并安装了它来尝试一下。
安装目录是1.6GB,我可以在pkgs
目录中看到有很多库。
但是,当我尝试安装环境时,conda
不会在本地目录中查找。。。
conda create --offline --use-local --dry-run --name pandas_etl python
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata:
Solving package specifications:
Error: Package missing in current linux-64 channels:
- python
那么,如果conda
需要在在线存储库中获取这些库,那么捆绑所有这些库有什么意义呢?也许我错过了什么?
为了方便部署,我正在寻找一种“包括python在内的大量电池”。
注意:我使用的是Linux系统,安装的是普通的水蟒,而不是迷你水蟒
好吧,在阅读Fabio Nelli的《Python数据分析》一书时,我和熊猫玩过之后,我意识到有多少熊猫是一个很棒的库。 所以,我一直在和水蟒合作,让它在我的环境中工作。
1-下载Anaconda安装程序并安装它(我想miniconda就足够了)
2-通过镜像anaconda存储库的(部分)创建本地通道
不要试图在工作站上下载单个软件包以将其推送到脱机服务器。事实上,依赖关系不会得到满足。 包需要包含在通道中,并在元数据文件(repodata.json和repodata.json.bz2)中建立索引,才能正确地“粘合”在一起。
我用wget镜像了水蟒存储库的一部分:https://repo.continuum.io/pkgs/ 为了不下载整个回购协议,我使用了这样的方法过滤掉包:
小心,不要使用“仅py35”这样的软件包。实际上,repo中的许多包的名称中都没有版本字符串;而且您会将它们作为依赖项而忽略掉。
好吧,我想你可以更准确地过滤。我拿到了大约6GB的包裹!
!!!!不要从您刚刚下载的存储库部分构建自定义频道!!!!(Python自定义频道) 我首先尝试了这个方法,但出现了一个异常:“RecursionError:调用Python对象时超过了最大递归深度”。 这是已知的pb: https://github.com/conda/conda/issues/2371 ==>;维护人员讨论了这一点:repodata.json和repodata.json.bz2中维护的元数据不反映单个pkg中的元数据。他们选择只编辑repo元数据来修复问题,而不是每个包元数据。 因此,如果从包中重建通道元数据,则会丢失。
==>;所以:不要重建通道元数据,只需保留存储库元数据(repodata.json和repodata.json.bz2包含在官方anaconda存储库中)。 即使整个回购协议不在您的新通道中,它也会工作(至少,如果在镜像时没有过滤到太多;-)
3-测试并使用新频道
注意:不要在路径中包含您的平台架构。 示例:您的通道树可能是:Path_to_your_channel/repo.continuum.io/pkgs/free/linux-64 省略你的arch(在我的例子中是linux-64)。康达会发现的。
更新:
等等。。。 我想,您可以使用系统用户的conda conf文件强制使用这个本地通道。
希望有帮助。
纪尧姆
我有一个类似的情况,并提出了一个不同的解决方案-也许更少的'Python'('Condaic?'),但非常方便。它有一些假设,但这可能是一种常见情况,甚至在您的情况下也可能有用;)
情况/假设:
生产服务器和我的机器都使用Linux、anaconda3,而且它们是相同的体系结构(在我的例子中是x86_64)。
生产服务器没有Internet
用于部署的计算机具有Internet和到生产的SSH(隧道、vpn等)
使用conda 4.3的诀窍是使用
sshfs
将目标环境装载为自己的环境:当您想使用根环境时,问题就出现了。这毕竟是
anaconda3
目录,需要特别处理(例如,envs只符号链接conda
、activate
和deactivate
子目录中的可执行文件)。然后您可以“全部进入”并挂载整个anaconda3
目录,但有一个警告-您机器上的路径必须与生产匹配!这对我来说很有效,但我建议您在进行这样的实验之前备份一下生产环境。
另一种选择是使用conda-pack。
从documentation:
相关问题 更多 >
编程相关推荐