Leif160519的blog Leif160519的blog

——————

目录
搭建自己的pip源
/  

搭建自己的pip源

出于安全因素,企业内多数服务器不能访问外网,这些服务可能有安装某些 python package 的需求,所以很有必要搭建企业私有的 pypi 源。Bandersnatch 是一个用于同步 pypi 源的工具,采用它下载和同步官网所有 package 到本地,最后由 nginx 发布。

  • 准备 300G 或以上的存储空间
  • bandersnatch:下载某个源的所有 package 到本地
  • nginx:发布本地 pypi
    ###1.Installation
    采用 pip 安装:
$ pip install bandersnatch

采用源码安装:

$ wget https://pypi.python.org/packages/source/b/bandersnatch/bandersnatch-1.5.tar.gz
$ tar -zxvf bandersnatch-1.5.tar.gz
$ cd bandersnatch-1.5
$ python setup.py install

###2.Configure
生成配置文件/etc/bandersnatch.conf

$ bandersnatch mirror

2014-09-15 09:37:30,631 WARNING: Config file '/etc/bandersnatch.conf' missing, creating default config.
2014-09-15 09:37:30,631 WARNING: Please review the config file, then run 'bandersnatch' again.

/etc/bandersnatch.conf
根据实际情况,重点修改以下两个配置,directorypackage 在本地存放的位置,master 指被同步的源。

[mirror]
; The directory where the mirror data will be stored.
directory = /srv/pypi

; The PyPI server which will be mirrored.
; master = https://testpypi.python.org
; scheme for PyPI server MUST be https
master = https://pypi.python.org

###3.Download & Synchronize
下载所有 package 至本地:

$ bandersnatch -c /etc/bandersnatch.conf mirror

2014-01-15 09:49:26,556 INFO: bandersnatch/1.5 (CPython 2.7.6-final0, Linux 3.19.0-37-generic x86_64)
2014-01-15 09:49:26,558 INFO: Setting up mirror directory: /srv/pypi/
2014-01-15 09:49:26,559 INFO: Setting up mirror directory: /srv/pypi/web/simple
2014-01-15 09:49:26,560 INFO: Setting up mirror directory: /srv/pypi/web/packages
2014-01-15 09:49:26,560 INFO: Setting up mirror directory: /srv/pypi/web/local-stats/days
2014-01-15 09:49:26,561 INFO: Generation file missing. Reinitialising status files.
......

更新本地的 pacakge:

$ bandersnatch -c /etc/bandersnatch.conf mirror

2014-09-15 09:54:35,813 INFO: bandersnatch/1.5 (CPython 2.7.6-final0, Linux 3.19.0-37-generic x86_64)
2014-09-15 09:54:35,814 INFO: Status file missing. Starting over.
2014-09-15 09:54:35,814 INFO: Syncing with https://pypi.python.org.
2014-09-15 09:54:35,815 INFO: Current mirror serial: 0
2014-09-15 09:54:35,815 INFO: Resuming interrupted sync from local todo list.

###4.Config nginx
安装 nginx:

$ apt-get install nginx

/etc/nginx/sites-available/default/etc/nginx/sites-available/default配置如下:

server {
    listen *:80;
    server_name pypi_server;
    root /srv/pypi/web;
    autoindex on;
    charset utf-8;
}

启动nginx

$ /etc/init.d/nginx start

###5.Test
客户端 pip 配置为:

$ cat ~/.pip/pip.conf
[global]
index-url = http://<your_pypi>/simple

测试如下:

$ pip install apasvo

Downloading/unpacking apasvo
http://<your_pypi>/simple/apasvo/ uses an insecure transport scheme (http). Consider using https if <your_pypi> has it available
Downloading APASVO-0.0.5-py2-none-any.whl (226kB): 226kB downloaded
......


“The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.” – Tom Cargill

标  题搭建自己的pip源
作  者Leif160519
出  处https://github.icu/articles/2019/08/22/1566472046568.html
关于博主:坐标南京,运维工程师,如有问题探讨可以直接下方留言。
声援博主:如果您觉得文章对您有帮助,可以评论、订阅、收藏。您的鼓励是博主的最大动力!