只需使用python anaconda,无需连接互联网

只需使用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

我希望在无法访问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
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”),但非常方便。它有一些假设,但这可能是一种常见情况,甚至在您的情况下也可能有用;)

情况/假设:

  • 生产服务器和我的机器都使用Linux、anaconda3,它们是相同的体系结构(在我的例子中是x86_64)

  • 生产服务器没有Internet

  • 用于部署的计算机具有Internet和SSH到生产环境(隧道、VPN等)

  • 使用我的conda 4.3的诀窍是使用
    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解包

    • 在这一点上,环境就像您安装