基础介绍
很多时候,我们都是一起安装多个包, 所以推荐使用requirements.txt
文件的方式,这样也方便管理包和包版本。
requirements.txt
文件,可以指定版本package==1.0.0
, 也可以不指定packge版本, 并且每个包和版本都在一行上,例如:
django==3.2.0
ipython
这将下载3.2.0版本的django
,和最新版本的ipython
,以及它们的依赖文件。
有关pip2pi
的更多文档,请查看。
安装pip2pi
工具
我们使用pip2pi
这个包来下载和创建源的索引。
安装pip install pip2pi
, 会安装两个命令pip2tgz
、dir2pi
,后文我们基本都会使用到。
1.下载包pip2tgz
可以下载单独的包,pip2tgz /home/pypi/pypi django==3.2.0
,如果不指定版本(即==3.2.0),那么就会下载最新版本,
命令中指定的/home/pypi/pypi
是存放下载的包源文件的目录,可以更改为自己想要的目录。
也可以批量下载包,pip2tgz /home/pypi/pypi -r requirements.txt
。-r requirements.txt
,这句说明下载requirements.txt文件中指定的包。
2.建立索引dir2pi /home/pypi/pypi
, 会在/home/pypi/pypi
目录中创建一个名为simple
的文件夹。
3.使用本地文件安装包
我们此时已经可以直接使用本地的源来安装了,尽管还不能从公网访问。
使用命令:
pip install --index-url=file:///home/pypi/pypi/simple django==3.2.0
当然我们也可以搭建Web服务,来允许在网络上使用。
搭建Web服务
我们需要使用到nginx
,使用命令yum install nginx
进行安装。
安装完成后,我们需要修改nginx的配置文件/etc/nginx/nginx.conf
修改配置为:
server {
listen 80;
server_name example.com; # 也可以使用IP的方式
root /home/pypi/pypi; # 此处直接指定到simple的父级目录,这样我们可以使用http://example.com/simple来作为源的链接
location /{
autoindex on;
autoindex_exact_size off; #显示文件的大小
autoindex_localtime on; #显示文件时间
# limit_rate_after 5m; #5分钟后下载速度限制为200k
limit_rate 200k;
}
access_log /var/log/nginx/pypi.log main;
}
使用nginx -t
查看配置文件是否正确,以下的提示为配置正确:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重启nginx
服务器,让修改后的配置生效,systemctl restart nginx
。
如果访问example.com/simple
报403
错误,
可以使用命令 ps -ef | grep nginx
查看显示的worker process
是否是和pypi
文件夹的权限一致,
如果不一致, 修改/etc/nginx/nginx.conf
文件中的user xxx
为:user name group
,
其中name
和group
是/home/pypi/pypi
的文件夹用户和组(可以使用命令ls -alh /home/pypi/pypi
查看)。
使用新的pypi源
我们已经完成了Web服务的搭建,此时可以修改pip的源,以便安装包时,可以使用我们自己的源。
- 临时使用我们的源安装包
pip install --index-url=http://example.com/simple/ django=3.2.0
- 修改全局配置,每次安装包都从我们的源来安装
修改全局的pip配置文件,编辑~/.pip/pip.conf
文件:
[global]
index-url=http://example.com/simple
如果我们使用虚拟环境,那么也可以同时修改虚拟环境的pip配置文件,编辑虚拟环境中venv_name/pip.conf
:
[global]
index-url=http://example.com/simple
#[install]
#trusted-host=ip # 如果是IP的形式,我们需要信任这个IP
然后我们就可以直接安装包了:
pip install django==3.2.0
pip install ipython