建立私有的pip库

1. 目的:

解决公司内部不允许访问外网直接安装python第三方包尴尬问题。

2. 说明:

在生产中,往往会面对这样的问题,公司的私有网络,处于安全的考虑,不允许内网中的电脑直接访问外部网络,并下载安装包,这样在生产的过程中有大量的时间浪费在了搭建开发环境上,得不偿失。要想干活干的爽,干的快,这个问题还必须得解决,在公司内网中搭建一套和外网一样的环境,可以使用直接使用pip命令来进行python包安装。

3. 搭建过程:

第一步:爬虫得到所需的数据包,一劳永逸的做法就是将所有的安装包全部爬下来:

代码如下:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project :pip_bank 
@File    :download_pip_packages.py
@Author  :Zong xiaobing
@Date    :2023/6/13 11:07 
'''
import requests
import bs4
import re
import wget
import os

a = requests.get("<https://pypi.tuna.tsinghua.edu.cn/simple>").text
b = bs4.BeautifulSoup(a, "html.parser")
s = b.find_all("a")
count = len(os.listdir("F:/KunLun_AI/pip_bank/whl/"))  // 统计当前的下载个数

with open("F:/KunLun_AI/pip_bank/whl/pypi.txt", "w") as f:
    for i in range(len(os.listdir("F:/KunLun_AI/pip_bank/whl/")), len(s)):
        tree = requests.get("<https://pypi.tuna.tsinghua.edu.cn/simple/>" + s[i].text).text
        tree_parser = bs4.BeautifulSoup(tree, "html.parser")
        real_name = tree_parser.find_all("a")
        // 追加下载,避免从头开始解析
				for j in range(len(real_name)):
            print(str(count) + " ---->> " + str(real_name[j].text))
            count += 1
            whlname = real_name[j].text
            # 以下载python3.10为例,需要其他的可以自己调整代码
            if not os.path.exists("F:/KunLun_AI/pip_bank/whl/" + real_name[j].text):
                if (re.findall(r'cp310', whlname) or re.findall(r'none-any', whlname)) and re.findall(r'.*\\.whl', whlname):
                    # print(real_name[i].text+" URL:<https://pypi.tuna.tsinghua.edu.cn/simple/"+real_name[i].attrs['href']+"\\n>")
                    f.write(real_name[j].text + " URL:<https://pypi.tuna.tsinghua.edu.cn/simple/>" + real_name[j].attrs['href'] + "\\n")

                    # print(real_name[j].text)
                    wget.download("<https://pypi.tuna.tsinghua.edu.cn/simple/s[i].text/>" + real_name[j].attrs['href'],
                                  "F:/KunLun_AI/pip_bank/whl/" + real_name[j].text)

将爬虫获得的所有数据包打包上传到公司内部的服务器,文件比较大,慢慢上传。我上传的地址为/opt/pypi/Packages/

第二步:建立索引

先安装pip2pi用来给python包所在的路径建立索引。

方式1:本地在线安装pip2pi:pip install pip2pi

方式2:离线安装pip2pi:

pip2pi下载地址:<https://pypi.doubanio.com/packages/9d/ad/47acabb00573eb0694fc8f9f1ca12d1d59220d35eb9f4d499ad445a66f17/pip2pi-0.8.1.tar.gz#sha256=135426f29a61d79e65ce27cd8b0eb2d738baeb8a9fb688f7fceb4878af878981>

pip install   --no-index   --find-links=/home/   pip2pi

查看/usr/local/python3/bin
pip2pi  pip2tgz dir2pi
pip2tgz 用来同步官方网站软件包到本地
dir2pi 用来对本地的软件包创建索引

然后命令行切换到下载的 .whl文件夹,建立索引(自动生成了index.html)

dir2pi -S /opt/pypi/Packages/ 此处的路径为.whl文件所在的包的位置,我的是/opt/pypi/Packages/根据自己情况替换。此时文件夹内就出现了一个simple文件夹,这里的内容就和阿里、清华、豆瓣的源差别没那么大了。

第三步:搭建http文件服务器

  • 在Ubuntu中通过apt-get install apache2 安装apache2 CentOS7中通过yum install httpd 安装httpd
  • apache2的配置文件是/etc/apache2/apache2.conf httpd的配置文件是/etc/httpd/conf/httpd.conf
  • 配置文件里面的内容大同小异,两者默认的访问端口都是80端口,当然这是可以在配置文件中进行修改的。在配置文件中可以发现,服务器默认的访问路径在/var/www/html目录下。只是为了简单实现一台http文件服务器,因此可以在此目录下创建一个软连接来连接文件目录。
    • 192.168.1.10这个节点作为安装包文件目录是/opt/pypi/Packages/,然后通过命令ln -s /opt/pypi/Packages/simple/ simple/var/www/html/目录下创建了一个软连接。

第四步:配置pip源

首先打开浏览器http://你的IP/simple测试能正常打开后

配置pip源

创建pip的配置文件:mkdir -p ~/.pip/pip.conf
然后:vim ~/.pip/pip.conf 进入配置文件
将以下内容复制到pip.conf文件中保存退出

[global] 
timeout = 6000
index-url = http://{yourIP}/simple // 去掉{}
trusted-host = {yourIP} // 去掉{}

使用pip命令安装包,和在外网环境下一模一样,再也不用内外网来回切换下载、上传、安装重复的浪费时间了。生产效率蹭蹭往上提!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值