构建快速部署的python pip环境及pypi本地源环境

简介:

前言:

大家用pip安装模块有没有遇见过这样的情况:

对的,这就是抽风的timeout

昨天看到一个朋友慢腾腾给所有节点搞tornado,他的源是官方的源,官方的源时不时的会抽风,会慢的。所以我推荐他用国内的源,或者是连接我们自己搭建的源。

由此

我就跟大家扯一下如何构建快速的python 模块的环境 ~


其实国内很多大公司都有自己的pypi源的,只是好多都私有环境的

下面都是国内速度比较快的节点


指定pypi源的方法:


1
pip install tornado -i http: //pypi.sdutlinux.org/simple




也可以是全局的模式


在unix和macos,配置文件为:$HOME/.pip/pip.conf

在windows上,配置文件为:%HOME%\pip\pip.ini


需要在配置文件内加上:


1
2
[global]
index-url=http: //mirrors.tuna.tsinghua.edu.cn/pypi/simple



以前我都是用豆瓣的源,现在豆瓣的源貌似有问题啦。。。哎,可惜啦

提示:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
Downloading/unpacking tornado
   Getting page http: //pipy.douban.com/simple/tornado/
   Could not fetch URL http: //pipy.douban.com/simple/tornado/: <urlopen error [Errno -2] Name or service not known>
   Will skip URL http: //pipy.douban.com/simple/tornado/ when looking for download links for tornado
   Getting page http: //pipy.douban.com/simple/
   Could not fetch URL http: //pipy.douban.com/simple/: <urlopen error [Errno -2] Name or service not known>
   Will skip URL http: //pipy.douban.com/simple/ when looking for download links for tornado
   Cannot fetch index base URL http: //pipy.douban.com/simple/
   URLs to search  for  versions  for  tornado:
   * http: //pipy.douban.com/simple/tornado/
   Getting page http: //pipy.douban.com/simple/tornado/
   Could not fetch URL http: //pipy.douban.com/simple/tornado/: <urlopen error [Errno -2] Name or service not known>
   Will skip URL http: //pipy.douban.com/simple/tornado/ when looking for download links for tornado
   Could not find any downloads that satisfy the requirement tornado



想用更多的源,到这里看看 www.pypi-mirrors.org



可以看到好多的节点的运行情况和速度。


我们的监控系统是python开发的,客户端当然也是python,时常需要大量的部署,最开始我们用的是反向代理做缓存,效果还是很不错的。

我们在用puppet批量部署监控客户端的时候,会让pip指定我们已经反向缓存的pypi的地址、版本库  


比如:


pip install -i https://10.2.20.66/qinghua


意思就是从清华那里搞到包。我想大家都应该熟悉缓存代理吧,大家自己加个location指定proxy_pass就行啦~


一个例子:

(我这里就不详细说明意思了,大家可以看看我写过的nginx反向代理的文章。。。)


install


1
2
3
4
5
6
7
8
9
10
11
ulimit -SHn  65535
yum install pcre pcre-devel -y 安装pcre
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
wget http: //labs.frickle.com/files/ngx_cache_purge-1.4.tar.gz
tar zxvf ngx_cache_purge- 1.4 .tar.gz
wget http: //nginx.org/download/nginx-1.0.11.tar.gz
tar zxvf nginx- 1.0 . 11 .tar.gz
cd nginx- 1.0 . 11 /
./configure --user=www --group=www --add-module=../ngx_cache_purge- 1.4  --prefix=/usr/local/nginx -- with -http_stub_status_module -- with -http_ssl_module
make && make install
cd ../


关键配置


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
proxy_cache_path  / var /lib/nginx/cache/ levels= 1 : 1 : 2  inactive=24000h keys_zone=cache:100m;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
server {
         listen    8000  default ;
         server_name  localhost;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
         access_log  / var /log/nginx/localhost.access.log;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
         #中间省略部分默认配置
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
         location /guanfang {
                 proxy_pass http: //pypi.python.org/simple;
         proxy_cache cache;
         proxy_cache_valid  any 2400h;
         }
         location /douban {
             proxy_pass http: //pipy.douban.com/simple;
             proxy_cache cache;
             proxy_cache_valid  any 24000h;
             proxy_redirect off;
             proxy_set_header Host $host;
             proxy_cache cache_one;
             proxy_cache_valid  200  302  1h;
             proxy_cache_valid  301  1d;
             expires 30d;
     }
     location /taiwan {
             proxy_pass http: //mirrors.tuna.tsinghua.edu.cn/pypi/simple;
             proxy_cache cache;
             proxy_cache_valid  any 24000h;
             proxy_redirect off;
             proxy_set_header Host $host;
             proxy_cache cache_one;
             proxy_cache_valid  200  302  1h;
             proxy_cache_valid  301  1d;
             expires 30d;
         }
     location /jiaoyu {
             proxy_pass http: //mirrors.tuna.tsinghua.edu.cn/pypi/simple;
             proxy_cache cache;
             proxy_cache_valid  any 24000h;
             proxy_redirect off;
             proxy_set_header Host $host;
             proxy_cache cache_one;
             proxy_cache_valid  200  302  1h;
             proxy_cache_valid  301  1d;
             expires 30d;
         }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
}


我们讲了用国内国外的pypi节点来快速部署你的环境,来说下,我们线上的部署方法:

个人觉得这个适用于需要大批量部署,又有模块定制,而有些节点不能联外网情况下适用。

要是大家的环境不大,推荐用 -i 的方式。 毕竟搭建私有pypi服务是很折腾的事~


安装pypimirror

1
pip install z3c.pypimirror


要是安装不上的话,可以用官方的方式:



1
2
3
4
5
6
$ git clone https: //github.com/macagua/macagua.buildout.pypimirror.git
$ virtualenv .
$ source ./bin/activate
$ python bootstrap.py
$ ./bin/buildout -vvvN
$ deactivate




安装完毕就要填写配置文件,需要填写的参数主要有:

mirror_file_path 下载的包的存放路径

base_url 服务器地址,这个注意要和Apache上的一致!

create_indexes 布尔类型,用来在下载的每个包目录下创建索引

package_matches 这个是用户自定义的,PyPI包无数,使用正则表达式有选择地下载,要不然硬盘要爆了

lock_file_name 设置运行时锁状态文件存放位置

log_filename 设置日志文件存放位置


生成配置索引

1
pypimirror -c -v -I pypimirror.cfg


这里很慢的,就算你用国内的源,也会让你气的抽风,骂的吐血~


我是在公司线上机房做的测试,居然还是同步出问题,想看看抽风不?


也可以修改配置文件


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
DEFAULT]
# the root folder of all mirrored packages.
if  necessary it will be created  for  you
mirror_file_path = /home/pypimirror/paquetes
# where's your mirror on the net?
base_url = http: //pypi.python.jp/
# lock file to avoid duplicate runs of the mirror script
lock_file_name = /home/pypimirror/pypi-poll-access.lock
# Pattern  for  package  files, only those matching will be mirrored
filename_matches =
     *.zip
     *.tgz
     *.egg
     *.tar.gz
     *.tar.bz2
# Pattern  for  package  names; only packages having matching names will
# be mirrored
package_matches =
#   zope.*
#   plone.*
#   Products.*
#   collective.*
    *.*
# remove packages not on pypi (or externals) anymore
cleanup = True
# create index.html files
create_indexes = True
# be more verbose
verbose = True
# resolve download_url links on pypi which point to files and download
# the files from there ( if  they match filename_matches).
# The filename and filesize (from the download header) are used
# to find out  if  the file  is  already on the mirror. Not all servers
# support the content-length header, so be prepared to download
# a lot of data on  each  mirror update.
# This  is  highly experimental and shouldn't be used right now.
#
# NOTE: This option should only be  set  to True  if  package_matches  is  not
set  to  '*'  - otherwise you will mirror a huge amount of data. BE CAREFUL
# using  this  option!!!
external_links = False
# similar to  'external_links'  but also follows an index page  if  no
# download links are available on the referenced download_url page
# of a given  package .
#
# NOTE: This option should only be  set  to True  if  package_matches  is  not
set  to  '*'  - otherwise you will mirror a huge amount of data. BE CAREFUL
# using  this  option!!!
follow_external_index_pages = False
# logfile
log_filename = /home/pypimirror/pypimirror.log



更新

1
pypimirror -c -v -i -U pypimirror.cfg


参数说明:

-i 创建索引

-U 更新镜像。



假设前面设置的下载文件存放路径为/data/pypi/files,下面把它链接到/var/www/目录下:

ln -s /data/pypi/files /var/www/pypi

重启Apache,访问http://xiaorui.cc/pypi/ 应该就可以了。这是最简单的配置,这时的base_url就是 http://xiaorui.cc/pypi/ 。


让他定期更新下


安装pypimirror遇到的问题:


1
Traceback (most recent call last):  File  "/usr/local/lib/python2.6/dist-packages/bottle.py" , line  764 in  _handle     return  route.call(**args)  File  "/usr/local/lib/python2.6/dist-packages/bottle.py" , line  1575 in  wrapper    rv = callback(*a, **ka)  File  "hydenMain.py" , line  39 in  static     return  static_file(filename, root= '{}/static' .format( '.' ))ValueError: zero length field name  in  format


大家把python升级到2.7就行了


需要说明的是,本地的pypi安装的时候,会出现各种各样的问题,请大家都尝试和搜下问题所在。 我们可以把问题都统计下来,好让也遇到这样的问题的人,能更好的定位和解决问题。



 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1290456,如需转载请自行联系原作者



相关文章
|
11月前
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
2583 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
11月前
|
机器学习/深度学习 算法 量子技术
GQNN框架:让Python开发者轻松构建量子神经网络
为降低量子神经网络的研发门槛并提升其实用性,本文介绍一个名为GQNN(Generalized Quantum Neural Network)的Python开发框架。
303 4
GQNN框架:让Python开发者轻松构建量子神经网络
|
9月前
|
API 语音技术 开发者
Python 项目打包,并上传到 PyPI,分享项目
本文介绍了如何使用 Poetry 打包并发布一个 Python 项目至 PyPI。内容包括:项目创建、配置 `pyproject.toml` 文件、构建软件包、上传至 PyPI、安装与使用。通过实例 iGTTS 展示了从开发到发布的完整流程,帮助开发者快速分享自己的 Python 工具。
|
10月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
1721 1
|
10月前
|
JavaScript 前端开发 机器人
【Azure Bot Service】在中国区Azure上部署机器人的 Python 版配置
本文介绍了在中国区Azure上使用Python SDK配置Azure Bot Service时遇到的问题及解决方案,涵盖参数设置与适配器配置,适用于希望在Azure中国区部署Python机器人的开发者。
271 9
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
816 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
Python
在VScode环境下配置Python环境的方法
经过上述步骤,你的VSCode环境就已经配置好了。请尽情享受这扇你为自己开启的知识之窗。如同你在冒险世界中前行,你的探索之路只有越走越广,你获得的知识只会越来越丰富,你的能力只会越来越强。
1218 37
|
12月前
|
数据采集 数据可视化 JavaScript
用Python采集CBC新闻:如何借助海外代理IP构建稳定采集方案
本文介绍了如何利用Python技术栈结合海外代理IP采集加拿大CBC新闻数据。内容涵盖使用海外代理IP的必要性、青果代理IP的优势、实战爬取流程、数据清洗与可视化分析方法,以及高效构建大规模新闻采集方案的建议。适用于需要获取国际政治经济动态信息的商业决策、市场预测及学术研究场景。
|
数据采集 Web App开发 自然语言处理
利用Python构建今日头条搜索结果的可视化图表
利用Python构建今日头条搜索结果的可视化图表

热门文章

最新文章

推荐镜像

更多