目录

🏆 利用uv管理Python虚拟环境

利用pipenv管理Python虚拟环境

因为pipenv默认是安装在~/.config/pipenv下,感觉不如venv实用。:-x
python3.8 -m venv venv # 生成一个venv目录,依赖包安装此下面,干净
source ./venv/bin/active

参考资料

  pip3 config set global.index-url http://mirrors.aliyun.com/pypi/simple/
  pip3 config set install.trusted-host mirrors.aliyun.com

安装步骤

安装python最新版本

如果是更高版本的python安装【源代码编译安装】,还需要 gcc升级gcc编译8.1 以上版本。
yum install -y gcc gcc-c++ \
     zlib-devel libffi-devel openssl openssl-devel \
     bzip2-devel gdbm-devel xz-devel readline-devel \
     sqlite-devel libuuid-devel tk-devel tcl-devel
 
ldconfig
 
export CC=/opt/gcc84/bin/gcc; export CXX=/opt/gcc84/bin/g++ ;
 
./configure --prefix=/opt/python312 --enable-shared --enable-optimizations --with-openssl=/opt/openssl

–enable-optimizations(升级gcc至8.1.0才能使用)

No module named '_ctypes'

python3中有个内置模块叫ctypes,它是python3的外部函数库模块,提供了兼容C语言的数据类型,并通过它调用Linux系统下的共享库(Shared library),此模块需要使用centos7系统中外部函数库(Foreign function library)的开发链接库(头文件和链接库)。 由于在centos7系统中没有安装外部函数库(libffi)的开发链接库软件包,所以在安装pip的时候就报了“ModuleNotFoundError: No module named '_ctypes'“的错误。

yum install libffi-devel

如果没有root权限安装libffi

先下载了libffi的源码, 用通常的命令编译它:

./configure --prefix=/home/user123/libffi
make 

重新编译了python

./configure --prefix=/opt/python3 LDFLAGS='-L/home/user123/libffi/lib64'
make 

module _tkinter missing

某些情况下:

tcl/tk安装不完整,没有包含pkg-config的.pc文件,需要下载tcl/tk的源码编译。然后把编译出来的tk.pc和tcl.pc,拷贝到/usr/lib64/pkgconfig目录下就能被系统找到后再重新编译python 即可:

pkg-config --modversion tcl
pkg-config --modversion tk
pkg-config --cflags tcl
pkg-config --libs tk

pkg-config的示例:

# tcl pkg-config source file
 
prefix=/opt/tcltk8614
exec_prefix=/opt/tcltk8614
libdir=/opt/tcltk8614/lib
includedir=${prefix}/include
libfile=libtcl8.6.so
 
Name: Tool Command Language
Description: Tcl is a powerful dynamic programming language
URL: https://www.tcl-lang.org/
Version: 8.6.14
Requires.private: zlib >= 1.2.3
Libs: -L${libdir} -ltcl8.6 -ltclstub8.6
Libs.private: -ldl -lz  -lpthread -lm
Cflags: -I${includedir}

安装pip最新版本

Pip 官网是 Python 包管理工具,,该工具提供了对Python 包的查找、下载、安装、卸载的功能。 Pip使用指南

目前python.org下载最新版本的安装包,如:
Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具。

你可以通过以下命令来判断是否已安装:

pip --version
pip list

如果你还未安装,则可以使用以下方法来安装:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py   # 下载安装脚本
sudo pythonXX get-pip.py    # 运行安装脚本

如果版本低,提示升级:

/opt/python382/bin/python3 -m pip --default-timeout=100 install --upgrade pip
注意: 指定具体版本的Python解释器来运行安装脚本,pip就被关联到哪个版本

如果出现如下错误:

ImportError: cannot import name 'sysconfig'

python3需要安装

sudo apt-get install python3-distutils

离线下线依赖包

pip3 download -r requirements.txt -d ./packages/

离线安装依赖包

pip3 install --no-index --find-links=./packages/ -r requirements.txt

安装和升级pipenv

/opt/python27/bin/python2.7 -m pip --default-timeout=100 install pipenv # 安装包
/opt/python27/bin/python2.7 -m pip --default-timeout=100 install --upgrade pipenv # 升级包
 
/usr/local/bin/python3.7 -m pipenv run python3 # 指定运行特定的 python 版本
升级指定的包,通过使用==, >=, ⇐, >, < 来指定一个版本号。

使用pipenv

创建虚拟环境

一行命令搞定 virtualenv 和 pipfile 的初始化,它会在你的用户目录下对你的 virtualenv 进行统一管理。如果当前目录下有 requirements.txt 文件,它会非常贴心地帮你自动转换。(随后你就可以把 requirements.txt 扔掉了)

为某个项目创建虚拟环境。如指定目录

#cd /root/work
 
[root@OPS-HGH-FDI-020 work]# pipenv --python /opt/python27/bin/python2.7.15
Virtualenv already exists!
Removing existing virtualenv...
Creating a virtualenv for this project...
Pipfile: /disk/ssd1/work/Pipfile
Using /opt/python27/bin/python2 (2.7.15) to create virtualenv...
Also creating executable in /root/.local/share/virtualenvs/work-nByAQpyD/bin/python
Installing setuptools, pip, wheel...done.
Running virtualenv with interpreter /opt/python27/bin/python2
 
✔ Successfully created virtual environment! 
Virtualenv location: /root/.local/share/virtualenvs/work-nByAQpyD

初始化一个 python3 的环境

pipenv --three

初始化一个 python2 的环境

pipenv --two

初始化特定版本的环境

pipenv --python 3.6

pypy 也是可以的

pipenv --python pypy3

更新pypi源

提高依赖库安装的速度,vi Pipfile

[[source]]
 url = "https://pypi.tuna.tsinghua.edu.cn/simple"
 verify_ssl = true
 name = "pypi"

也可以在 pip的命令行后面跟上国内清华镜像做加速:-i https://pypi.tuna.tsinghua.edu.cn/simple

切换虚拟环境

[root@OPS-HGH-FDI-020 work]# pipenv shell
Launching subshell in virtual environment...
 . /root/.local/share/virtualenvs/work-nByAQpyD/bin/activate

退出环境

exit

安装 / 更新 / 卸载依赖

安装项目已有的所有依赖,加--dev表示包括 Pipfile 的 dev-packages 中的依赖

pipenv install --dev

安装某个包

pipenv install requests

安装指定版本的包,安装时加--dev表示加入到 dev 环境

pipenv install parsel==1.3.1

从项目中更新某个包

pipenv update requests

或更新所有的包

pipenv update

从项目环境中移除某个包

pipenv uninstall requests

另外,Pipefile 和 Pipefile.lock 都会按照你的操作进行自动的更新,如果需要手动修改包的依赖条件,手工编辑 Pipefile 并进行安装即可。

特殊调用方法

在 Dockerfile 中安装依赖

加–system参数表示使用 pip 直接安装相应依赖,不创建虚拟环境。

RUN pipenv install --deploy --system

cron里添加pipenv

* * * * * /usr/local/bin/pipenv run python /home/ubuntu/work/getgold.py >> /tmp/gold.txt 2>&1

打印环境中已安装的包

pipenv graph

能够更清晰地展示现有依赖包。

锁定版本

更新 lock 文件锁定当前环境的依赖版本

pipenv lock

环境变量管理

如果你开发调试时需要配一堆环境变量,可以写到.env文件中,在pipenv shell进入虚拟环境时,它会帮你把这些环境变量加载好,非常方便。

例如写一个.env文件

echo "FOO=23333" > .env

之后pipenv shell进入虚拟环境,echo $FOO就能看环境变量的值23333已经设置好了。

使用zipapp和venv打包发布

python3.8 -m venv venv # 生成一个venv目录,依赖包安装此下面,干净
source ./venv/bin/active
  • –system-site-packages:添加这个选项时,将包含系统级的site-packages
  • –without-pip: 虚拟环境中是否包含pip.exe

整合依赖包和源代码

git clone https://github.com/Julian-Nash/simple-flask-demo.git
cd simple-flask-demo/
pip3.6 install  -r requirements.txt -t .
 
find ./ -name "__pycache__" | xargs rm -rf
find ./ -name "*.dist-info" | xargs rm -rf
mv run.py __main__.py
 
cd ..
python3.6 -m zipapp simple-flask-demo/ -c -p '/usr/bin/env python3.6'
./simple-flask-demo.pyz 
注意这个模块是: -m zipapp

使用zipapps打包依赖环境

mkdir py_fastapi
.....        # 编写各种文件,过程略
mv run.py __main__.py
 
# 下载zipapps
pip3 install zipapps
pip3 freeze > requirements.txt
 
# 只打包虚拟环境
python3 -m zipapps -u AUTO_UNZIP -o vv.pyz -r ./py_fastapi/requirements.txt
python3 vv.pyz ./py_fastapi
注意这个模块是: -m zipapps -u AUTO_UNZIP

利用poetry管理Python虚拟环境

Poetry 是什么Poetry 和 Pipenv 类似,是一个 Python 虚拟环境和依赖管理工具,另外它还提供了包管理功能,比如打包和发布。你可以把它看做是 Pipenv 和 Flit 这些工具的超集。它可以让你用 Poetry 来同时管理 Python 库和 Python 程序。

poetry管理

安装

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
+ allowed_executables = [“python3”, “python”]
或修改 ~/.poetry/bin/poetry → ”#!/usr/bin/env python3”

升级

poetry self update

命令补全

poetry completions bash > /etc/bash_completion.d/poetry.bash-completion

自定义加速源

[[tool.poetry.source]]
name = "tsinghua"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"

poetry实操

初始化项目

poetry new pydemo

导入requirement.txt

poetry add `cat requirements.txt`
所有相关依赖都安装在
poetry config --list
poetry env info --path

~/.cache/pypoetry/virtualenvs/xxx

查看依赖

poetry show --tree / -t
 
#查看可以更新的依赖
poetry show --outdated

更新所有锁定版本的依赖包

poetry update / poetry update fastapi

卸载依赖包

poetry remove numpy