只需使用python anaconda,无需连接互联网
我希望在无法访问internet的生产服务器上部署python环境 我发现了PythonAnaconda发行版,并安装了它来尝试一下。 安装目录是1.6GB,我可以在只需使用python anaconda,无需连接互联网,python,anaconda,Python,Anaconda,我希望在无法访问internet的生产服务器上部署python环境 我发现了PythonAnaconda发行版,并安装了它来尝试一下。 安装目录是1.6GB,我可以在pkgs目录中看到很多库 但是,当我尝试安装环境时,conda不会在本地目录中查找 conda create --offline --use-local --dry-run --name pandas_etl python Using Anaconda Cloud api site https://api.anaconda.org
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系统并安装了常规的anaconda,而不是miniconda。好吧,在阅读了法比奥·内利的《Python数据分析》一书中的熊猫后,我意识到熊猫是多么棒的一个库。 所以,我一直在和水蟒合作,让它在我的环境中工作 1-下载并安装Anaconda安装程序(我想miniconda就足够了) 2-通过镜像anaconda存储库的(部分)创建本地频道 不要试图在工作站上下载单个软件包以将其推送到脱机服务器。事实上,依赖关系不会得到满足。 包需要包含在通道中,并在元数据文件(repodata.json和repodata.json.bz2)中建立索引,才能正确地“粘合”在一起 我使用wget镜像了anaconda存储库的一部分: 为了不下载整个回购协议,我使用了类似的方法来过滤软件包:
wget -r --no-parent -R --regex-type pcre --reject-regex '(.*py2[67].*)|(.*py[34].*)' https://repo.continuum.io/pkgs/free/linux-64/
注意,不要使用类似“仅py35”的软件包。实际上,repo中的许多包的名称中没有版本字符串;你会因为依赖而错过它们
嗯,我想你可以更准确地过滤。我得到了大约6GB的软件包
!!!!不要从刚下载的存储库部分构建自定义频道(蟒蛇自定义频道)
我一开始尝试了这个方法,但出现了一个异常:“RecursionError:调用Python对象时超过了最大递归深度”。
这是一个已知的pb:
==>维护人员讨论了这一点:repodata.json和repodata.json.bz2中维护的元数据不反映单个pkg中的元数据。他们选择只编辑repo元数据来修复问题,而不是编辑每个包元数据。
因此,如果从包中重建通道元数据,则会丢失
==>所以:不要重建通道元数据,只保留存储库元数据(repodata.json和repodata.json.bz2包含在官方anaconda存储库中)。
即使整个回购协议不在您的新渠道中,它也会起作用(至少,如果您在镜像时没有过多过滤;-))
3-测试并使用新频道
conda search -c file://Path_to_your_channel/repo.continuum.io/pkgs/free/ --override-channels
注意:不要在路径中包含您的平台体系结构。
示例:您的频道树可能是:/Path\u to\u您的频道/repo.continuum.io/pkgs/free/linux-64
只需省略您的arch(在我的例子中是linux-64)。康达会发现的
更新:
conda update -c file://resto/anaconda_repo/repo.continuum.io/pkgs/free/ --override-channels --all
等等。。。
我想,您可以使用系统用户的conda conf文件强制使用这个本地通道
希望能有帮助
纪尧姆我也遇到了类似的情况,并提出了不同的解决方案——可能不那么“Pythonic”(“Condaic”),但非常方便。它有一些假设,但这可能是一种常见情况,甚至在您的情况下也可能有用;) 情况/假设:
sshfs
将目标环境作为您自己的环境之一装载:
# prepare and enter the env 'remotely'
me@development:~/$ mkdir anaconda3/envs/production
me@development:~/$ sshfs prod_user@production.example.com:anaconda3/envs/production anaconda3/envs/production
me@development:~/$ source ~/anaconda3/bin/activate production
# do the work
(production) me@development:~/$ conda install pandas
# do the cleanup
(production) me@development:~/$ source deactivate
me@development:~/$ fusermount -u anaconda3/envs/production
当您想要使用根环境时,问题就出现了。这毕竟是anaconda3
目录,需要特别处理(例如,envs仅将conda
符号链接,激活和停用bin/
子目录中的可执行文件)。然后您可以“全部进入”并装载整个anaconda3
目录,但是有一个警告-您机器上的路径必须与生产相匹配强>
# prepare and enter anaconda root 'remotely'
me@development:~/$ sudo ln -s /home/me /home/prod_user
me@development:~/$ mv anaconda3 my_anaconda
me@development:~/$ mkdir anaconda3
me@development:~/$ sshfs prod_user@production.example.com:anaconda3 anaconda3
# activate the root
me@development:~/$ source ~/anaconda3/bin/activate
# do the work
(root) me@development:~/$ conda install pandas
# do the cleanup
(root) me@development:~/$ source deactivate
me@development:~/$ fusermount -u anaconda3
me@development:~/$ rmdir anaconda3
me@development:~/$ mv my_anaconda anaconda3
这对我来说是可行的,但我建议您在进行这样的试验之前对生产环境进行备份。另一个选择是使用。
从:
在源计算机上
- 将环境my_env打包到my_env.tar.gz中
$conda pack-我的环境
- 将环境my_env打包到out_name.tar.gz中
$conda pack-n my_env-o out_name.tar.gz
- 将位于my_env.tar.gz显式路径的环境打包
$conda pack-p/explicit/path/to/my_env
在目标机器上
- 将环境解压缩到目录
my_env
$mkdir-p我的环境
$tar-xzf my_env.tar.gz-C my_env
- 在不激活或修复前缀的情况下使用python。
大多数python库都可以正常工作,但需要前缀清理
将失败。
$./my_env/bin/python
- 激活环境。这会将
my_env/bin
添加到您的路径
$source my_env/bin/activate
- 在环境中从运行python
(my_env)$python
- 清除活动环境中的前缀
- 请注意,此命令也可以在不激活环境的情况下运行
- 只要机器上已经安装了python的某些版本。
(my_env)$conda解包
- 在这一点上,环境就像您安装