Ⅰ 【python基礎】PIP 鏡像源配置輕松搞定
pip 是 python 必不可少的的包管理工具,但是要在國內用得爽,必須要配置鏡像源。
有哪些鏡像站可用,以及如何配置,網上都有很多分享了。
我常用的是 阿里雲鏡像站 。
這里有一點比較麻煩的地方,就是是 linux 和 Windows 環境下的 pip 配置文件的名字和位置都不同,經常混淆。
今天就教大家一招,快速搞定:
執行完上面兩條命令就可以啦。
pip config set 命令能自動把配置寫入到用戶對應的配置文件中:
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
命令雖然方便,但是參數格式復雜,記虛山住不太容易,要是想改一下也挺麻煩,
所以我們進一步了解一下細節。
「 下面我以 Windows 系統為例,實際在 Linux 系統也是類似
查看配置
執行 pip config list 命令可以顯示已經有了哪些配置:
pip config list
global.index-url='http://mirrors.aliyun.com/pypi/simple/'
install.trusted-host='mirrors.aliyun.com'
帶上一個 -v 選項:
pip config list -v
For variant 'global', will try loading 'C:\ProgramData\pip\pip.ini'
For variant 'user', will try loading 'C:\Users\davy\pip\pip.ini'
For variant 'user', will try loading 'C:\Users\davy\AppData\Roaming\pip\pip.ini'
For variant 'site', will try loading 'c:\users\davy\appdata\飢飢local\programs\python\python38\pip.ini'
global.index-url='http://mirrors.aliyun.com/pypi/simple/'
install.trusted-host='mirrors.aliyun.com'
「 這里有一點不太好的地方是不顯示配置是在哪個文件里。
就把它嘗試獲取的配置文件名完整路徑列出來了。前面的 global 和 user 和 site 分別表示配置文件生效的范圍:
global - 全局,一般不用
user - 當前用戶,推薦
site - 只針對某一個 python 解釋器
可以看到 user 有兩個地方,其中配置任何一個都是可以的。
有的網路文章推薦的手動創建文件地差肢中址是前面那個,但是 pip 默認創建的是後者。
編輯配置
在命令行直接執行 pip config edit 會自動為我們打開配置文件,但是在 Windows 環境下還不行:
pip config edit
ERROR: Could not determine editor to use.
需要手動指定一個編輯器,就用記事本就行了:
pip config edit --editor notepad
「 Linux 系統中編輯器可以使用 vi,也可以是你習慣的其它編輯器
如果你從來沒有設置過,它會報 找不到指定路徑,這是因為相應的文件夾沒有創建。
設置配置
通過 pip config set 命令可以直接設置配置項,它會自動創建沒有的文件夾和文件。但是必須要給定一個配置項:
pip config set
ERROR: Got unexpected number of arguments, expected 2. (example: "pip config set [name] [value]")
我們隨便寫一個配置:
pip config set x.y z
Writing to C:\Users\davy\AppData\Roaming\pip\pip.ini
然後再執行上面的
pip config edit --editor notepad
就能自動打開配置文件,把拷貝好的配置文件內容貼進去就可以啦。
Ⅱ Python 鏡像源設置與代理
1、在%appdata%目錄下,新建文件夾pip
2、在pip文件夾下新建pip.ini文件
內容如下
1、安裝nexus3,可以原生安裝,也可以用docker安裝,具體步驟自己網路
2、添加python倉庫代理,參考 https://blog.csdn.net/u010674101/article/details/119895993
【重點】
Ⅲ python3.7基礎鏡像有多大
選擇基礎鏡像的難題
在使用Docker部署某類服務時,第一個面臨的問題就是選擇一個基礎鏡像。那麼如何選擇基礎鏡像更有利於我們的工作呢?
我們知道docker是基於linux的,任何一個鏡像,其包含的 bins/libs/files 都可以認為是屬於特定linux版本的一部分。linux一切皆文件的思想下,我們在使用docker製作服務鏡像部署時,包管理、環境設置、程序安裝、命令格式、文件系統、兼容性等對於不同linux版本都可能有一些區別,所以,選擇一個習慣使用的linux版本就變得尤為重要。
舉例來說,我需要經常用docker部署Python應用。在docker hub中選擇哪個基礎鏡像呢?搜索「適合Python開發的Docker鏡像」會有很多文章,常用的主要有Alpine、Stretch、Jessie等,默認版本是基於Ubuntu的,但是太大了。
Alpine是一個微型linux系統,選擇這個版本鏡像的很多,因為它足夠小,但是實際項目使用時卻發現各種各樣的問題。最大問題就是它的c運行庫採用 musl-libc 而不是linux各發行版的 glibc,所以涉及c運行時會有兼容性的問題。
2、定製基礎鏡像
在選擇基礎鏡像的問題上踩坑無數之後,決定換個角度想:為什麼不基於特定的linux版本,自己製作一個基礎鏡像呢?這樣自己又熟悉,又有開發環境來驗證問題,而且很多製作應用鏡像時遇到的問題,都可以在定製的基礎鏡像中一次性解決。
從這個想法出發,我選擇熟悉的linux版本基礎鏡像,然後在其中按需求安裝Python環境,一切都跟在伺服器上安裝Python環境一樣,這不就又回到了熟悉的操作了嗎?不同的是,這些只需要做一次就可以了,得到自己定製的Python基礎鏡像,後面製作各種應用鏡像時,只需要pip安裝依賴庫、復制文件、添加命令就可以了。
這個方法同樣適用其他的環境基礎鏡像定製,選擇自己的linux基礎鏡像,在其中像往常一樣安裝需要的環境。這樣,就可以從鏡像里不熟悉的文件系統中解脫出來了。
3、定製CentOS系統Python基礎鏡像
下面給出一個實例:
開發環境:CentOS 7
Python版本:3.6
# 完整功能python3 imiyuer/python:3.6.4-centos
FROM centos:7.5.1804
MAINTAINER imiyuer <[email protected]>
ENV PATH $PATH:/usr/local/python3/bin/
ENV PYTHONIOENCODING utf-8
RUN set -ex \
# 替換yum源
&& mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \
&& curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \
&& sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo \
# 安裝python依賴庫
&& yum makecache \
&& yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make wget \
&& yum clean all \
&& rm -rf /var/cache/yum \
# 下載安裝python3
&& wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz \
&& mkdir -p /usr/local/python3 \
&& tar -zxvf Python-3.6.4.tgz \
&& cd Python-3.6.4 \
&& ./configure --prefix=/usr/local/python3 \
&& make && make install && make clean \
# 修改pip默認鏡像源
&& mkdir -p ~/.pip \
&& echo '[global]' > ~/.pip/pip.conf \
&& echo 'index-url = https://pypi.tuna.tsinghua.e.cn/simple' >> ~/.pip/pip.conf \
&& echo 'trusted-host = pypi.tuna.tsinghua.e.cn' >> ~/.pip/pip.conf \
&& echo 'timeout = 120' >> ~/.pip/pip.conf \
# 更新pip
&& pip3 install --upgrade pip \
# 安裝wheel
&& pip3 install wheel \
# 刪除安裝包
&& cd .. \
&& rm -rf /Python* \
&& find / -name "*.py[co]" -exec rm '{}' ';' \
# 設置系統時區
&& rm -rf /etc/localtime \
&& ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
登錄後復制
比如我的生產環境是centos:7.5.1804,就選擇它作為基礎鏡像。
將Python安裝在/usr/local/python3,所以把程序路徑添加到PATH環境變數,後續安裝的python程序就不需要再添加環境變數或軟連接。添加Python的encoding環境變數為utf-8。
後面下載安裝Python的過程就都比較熟悉了,玩過Python的人都知道。
最終生成鏡像大小:453MB,感覺還好。alpine鏡像是90M但是很坑,默認python鏡像是689MB。
幾點說明:
1、RUN中盡量使用 \ &&連接命令的方式,減少鏡像層數,可以一定程度減少體積。
2、盡可能刪除不需要的文件,也是為了減少鏡像體積。
3、Python默認不安裝wheel,但是第三方庫常需要使用wheel安裝,所以加上它。
4、docker運行時程序獲取系統時間時,如列印日誌等,獲取的是docker鏡像內文件系統的時區設置,默認是格林尼治標准時區,所以需要設置為所在的時區。
Ⅳ Python項目打包為docker鏡像並遷移
1.安裝docker服務:
centos 下直接yum安裝
yum install docker
2.修改docker倉庫地址為國內:
略
3.編寫Dockerfile, 如下:
4.製作鏡像:
docker build -f Dockerfile -t blogapp:1.0 .
ps:
最後一個參數是.號,別忘了加
製作鏡像可能是一個漫長的過程。。。
途中有問題會中止,需要檢查問題並修改Dockerfile,然後重新開始。。。
5.查看製作的鏡像:
docker images
6.運行鏡像,創建鏡像實例,即運行容器:
docker run -it -p 192.168.5.109:8080:8888 blogapp:1.0
可以看到,項目已經正常開啟,瀏覽器可以正常訪問:
7.導出鏡像為tar包:
docker image save -o blogapp.tar blogapp:1.0
8.在新機導入tar包為鏡像:
docker load < blogapp.tar
9.查看新導入的鏡像:
10.在新機運行鏡像,後台開啟容器:
docker run -it -p 192.168.5.110:8080:8888 blogapp:1.0
可以看到後台開啟成功,瀏覽器訪問新址:
Ⅳ 你的 Python 鏡像還好嗎
隨著 k8s 集群規模變大,以及彈性擴容的觸發,導致 harbor 倉庫的瓶頸問題逐漸暴露出來,目前也做了一些優化措施:
在做鏡像優化的時候,發現之前我們的 python 提速方案還有一些瑕疵,所以有了這里的分析。
在 Python 項目構建 Docker 鏡像時,經常遇到項目源碼才幾百 KB,但是安裝的依賴能高達數百 MB,甚至 GB,這不僅使鏡像體積變的很大,而且因為網路安裝依賴包導致嚴重拖慢構建速度。
注意:這里僅關系依賴問題,所以忽略源碼部分
示例 1:
相當糟糕,依賴安裝了 713MB,花了 5 分鍾,太慢了。
基於剛才已經構建過的依賴鏡像,再次去構建時間工作的鏡像
示例 2:
為什麼這里再次安裝 requirements.txt,直接刪掉該步驟不就好了嗎?
實際情況下,研發人員可能會在倉庫中修改 requirements.txt,如果這里不再次安裝下,最終發版可能就要提示缺少包而報錯了。這里再次安裝下依賴,就是防止該問題。
再次構建,相當好,8 秒,再次安裝的依賴層 0B(我們這里沒有模擬研發人員修改 requirements.txt 的情況),我們取得了巨大的進步。
這個詞有點像電影里的鏡頭,以示例 2 中的 Dockerfile 再次構建:
示例 3:
問題來了,隨著歲月的流逝,構建時間怎麼變成了 2 分鍾,再次安裝的依賴層 173MB(我們這里沒有模擬研發人員修改 requirements.txt 的情況)
原來安裝依賴的時候除了上面 requirements.txt 中寫好的依賴,還有一些沒有出現在 requirements.txt 中的依賴,而這些依賴的版本如 grpcio>=1.8.6 會隨著時間的推移,而產生不同的版本
...
Requirement already satisfied: grpcio>=1.8.6 in /usr/local/lib/python3.6/site-packages (from tensorflow==2.0.0b1->-r /code/requirements.txt (line 9)) (1.34.1)
Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.6/site-packages (from tensorflow==2.0.0b1->-r /code/requirements.txt (line 9)) (0.33.4)
...
Ⅵ 【Python】 設置 pip 默認下載路徑(含國內鏡像源)
如使用 清華鏡像 安裝 lxml 庫的命令如下所示:
在c盤下找到當前用戶,進入當前用戶命名的文件夾後創建一個新文件夾「pip」,在pip中創建一個文本文件pip.txt,將後綴名改為.ini
pip.ini文件內容(設置國內鏡像源,這里使用的是清華鏡像,文章後面提供有其他常用鏡像)
保存即可,如安裝 lxml 庫的命令如下所示(默認為清華鏡像,不需要加 -i 屬性):
清華:https://pypi.tuna.tsinghua.e.cn/simple
阿里雲:http://mirrors.aliyun.com/pypi/simple/
中國科技大學 https://pypi.mirrors.ustc.e.cn/simple/
華中理工大學:http://pypi.hustunique.com/
山東理工大學:http://pypi.stlinux.org/
豆瓣:http://pypi.douban.com/simple/