如何在没有互联网接入和搜索的情况下制作本地Pypi镜像?

时间:2016-07-19 22:07:55

标签: python pip pypi devpi pypiserver

我试图在服务器上创建一个完整的本地Pypi存储库镜像和pip搜索功能我只能连接外部硬盘驱动器。为了清楚起见,我不想要一个简单的缓存系统,服务器连接到一个完全封闭的网络中的其他机器,根本无法访问互联网。

到目前为止我所做的是使用bandersnatch转储每个pypi包,我可以在它前面使用一个简单的http服务器进行pip安装。我还检索了pypi遗留源代码,并在没有任何python包的情况下使用它。我现在遇到的问题是连接双方,我甚至不确定这可以这样做。

我还测试了pypiserver。它可能已经完成了我想要的东西,但它的速度太慢,最终导致pip搜索抛出超时(看起来它没有被构建来处理那么多的包)。

最后,我看了看devpi。似乎可以很好地完成我想做的工作,但我正在寻找一种方法将我的bandersnatch转储轻松导入其中。看起来我不能基于本地目录创建索引。

感谢您的回复。

1 个答案:

答案 0 :(得分:2)

关于我们如何让DevPi在我们的环境中工作得很好,我不妨提供一个正确的答案:

  1. 安装DevPi
  2. DevPi需要Python 3!因此,请确保安装了{3}的Python 3版本。使用它:

    pip

    (可能是root)应该做的。

    1. 确保您的服务器防火墙已打开
    2. pip install -U devpi 默认使用端口3141。如果您DevPi安装了类似

      的内容
      firewall-cmd

      或系统上的等效命令。

      1. 配置firewall-cmd --zone=public --add-port=3141/tcp --permanent firewall-cmd --reload
      2. DevPi将开箱即用DevPi。我们还希望能够覆盖"覆盖"我们自己的包只在内部提供组织。对于本地nabCERT包,需要内部索引。好的,因为这个本身可以使用PyPi作为后备!

        选择要使用的devpi服务器 - 您可能正在使用的服务器

        PyPi

        现在创建一个可以添加和管理内部包并使用它们登录的用户

        devpi use  http://localhost:3141
        

        现在创建我们的内部索引来保存本地包,同时确保它将使用PyPi作为"后备"

        devpi user -c myuser  password=mypassword
        devpi login myuser --password mypassword
        
        1. 启动

          devpi-server --host = 0.0.0.0 --port = 3141 --serverdir = / var / www / pypi

        2. 尝试并安装软件包

          pip install -i http://localhost:3141/root/pypi/ simplejson

        3. 如果出现问题,请检查日志,我们的情况是devpi index -c myindex bases=/root/pypi volatile=True

          此时,如果已成功遵循上述所有设置,您应该能够打开网络浏览器并将其指向/var/www/pypi/.xproc/devpi-server/xprocess.log服务器

          devpi
          1. 自动启动DevPi
          2. 这有所不同。我们使用http://localhost:3141/myuser/myindex ,因此我创建了一个文件/ systemd

            usr/lib/systemd/system/devpi.service

            保存文件并通知systemd。

            [Unit]
            Requires=network-online.target
            After=network-online.target 
            
            [Service]
            EnvironmentFile=-/etc/sysconfig/devpi
            Type=forking
            PIDFile=/var/www/pypi/.xproc/devpi-server/xprocess.PID
            Restart=always
            ExecStart=/bin/devpi-server --host=0.0.0.0 --port 3141 --serverdir /var/www/pypi --start
            ExecStop=/bin/devpi-server --host=0.0.0.0 --port 3141 --serverdir /var/www/pypi --stop
            User=root 
            
            [Install]
            WantedBy=multi-user.target
            
            1. 配置客户端
            2. 指出你的客户' systemctl daemon-reload systemctl enable devpi 使用新的pip存储库创建一个DevPi文件,其中包含类似的内容

              /etc/pip.conf