解释器
基础环境搭建
Install for Windows
提供安装程序或者压缩包,安装程序点击下一步即可,压缩包解压即可,注意配置根目录到系统环境变量PATH。
Install for Linux
https://blog.csdn.net/dinglinuX/article/details/125885799
编译前提示,可能会遇到如下的坑:
- yum换源
- pip换源
- 编译python不过
- 编译完需要高版本openssl
- openssl路径问题
- airflow需要高版本sqlite3
需要从源码编译,以CentOS7为例:
# 安装编译器以及依赖
yum install -y gcc gcc-c++ compat-gcc-34 compat-gcc-34-c++
yum install -y zlib zlib-devel bzip2-devel zlib1g-dev libffi-devel xz-devel
yum install -y openssl-devel libpcap-devel
yum install -y ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel
# 安装高版本openssl
...
# 编译CPython
# 移动到/usr/local/src/目录
cd /usr/local/src/
# 下载源码
wget https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tgz
# 解压
tar zxf Python-3.11.5.tgz
cd Python-3.11.5
# configure
./configure --prefix=/usr/local/python --with-openssl=/usr/local/openssl --with-openssl-rpath=auto
echo $?
--enable-optimizations
# 优化编译
--prefix=/usr/local/python-3.11.5
# 指定目录
二进制文件在 /usr/local/python-3.11.5/bin;
头文件在 /usr/local/python-3.11.5/include;
库文件在 /usr/local/python-3.11.5/lib;
其它的资源文件如帮助文档在 /usr/local/python-3.10.0/share
# 不配置--prefix
二进制文件默认在 /usr/local/bin
头文件在 /usr/local/include
库文件默认在 /usr/local/lib
其它的文件在 /usr/local/share
--with-openssl=/root/openssl-1.1.0l
/root/openssl-1.1.0l路径为openssl官网下载的源码包解压后的文件夹路径
python pip联网下载模块依赖openssl
# 编译并安装
make && make install
# 注:编译时可能会出现很多警告,例如,CentOS最小化安装时没有安装图形化界面,因此编译Python中的tkinter模块时可能会出现警告。若编译失败,可以尝试重新编译,很多时候再编译一次就能成功。可以执行make clean,清除之前的编译文件后再次make, 也可以全部删除,然后从头再解压、configure、make一次。
# 配置环境变量
export PATH=/usr/local/python/bin:$PATH
# 注:CentOS7中yum依赖于Python2,安装的Python3不要与Python2.7.5冲突,一般执行python命令会进入Python2解释器,习惯上将Python3的命令重命名为python3
# 查看Python版本
python3.11 -V
Install for MacOS
提供安装程序,直接安装即可,注意配置环境变量。
虚拟环境搭建
在一些场景下,需要在同一台机器安装多套彼此隔离的Python环境,例如两个项目使用不同Python版本或者两个项目使用Python版本相同但依赖包版本不一,可以使用virtualenv或者Anaconda工具。
Python虚拟环境基于操作系统环境变量进行隔离,在激活虚拟环境之时,激活脚本会将当前命令行程序的PATH修改为虚拟环境的,这样执行命令就会在被修改的PATH中查找,从而避免了原本PATH可以找到的命令,从而实现了Python环境的隔离,激活环境后,会在命令行进行标记以指明当前环境。
virtualenv
Python虚拟环境配置工具,三方库。诞生于Python2时代,此时没有venv。
https://docs.python.org/zh-cn/3/library/venv.html
# 安装
pip install virtualenv
# 在当前目录创建虚拟环境new-venv
virtualenv -p /usr/local/python3 normal_env
# 注:virtualenv需要指定已经存在的解释器,不存在需要手动安装,不指定解释器则使用默认解释器
# 激活虚拟环境
# 通过virtualenv和venv创建的虚拟环境,激活方式相同,windows中cmd执行activate.bat或者powershell执行Activate.ps1,linux中直接执行activate(或者source activate
source /normal_env/bin/activate
# 退出虚拟环境
deactivate
venv
基于当前Python环境创建虚拟环境,Python标准库。诞生于Python3时代。
python -m venv nornal_env
Anaconda
Anaconda主要用于管理Python虚拟环境和三方依赖。
Install for Windows
提供安装程序,直接下一步安装即可,Anaconda默认自带一个Python解释器,无需执行上述基础环境搭建步骤。
# 查看版本
conda --version 或 conda -V
# 列出虚拟环境
conda env list
# 创建和移除虚拟环境
conda create -n your_env_name python=x.x
conda create --name new_env_name --clone old_env_name # conda默认环境为base,若导出base环境到目标机器会提示环境已存在,base无法删除,应克隆base环境导出base的复制环境
conda remove -n your_env_name --all
conda remove --name your_env_name --all
# 导出和导入环境
# 注:conda无法导出pip方式安装的包,导出时通常conda和pip均导出和导入一次
conda env export > py3.7.yaml
conda env create -f py3.7.yaml
# 环境激活和退出
conda activate env_name
conda deactivate env_name
虚拟环境激活就是在当前会话中临时将虚拟环境的路径加入到环境变量的开头。
IDE
Python主流IDE如下:
- PyCharm,JetBrains出品
- Visual Studio Code,微软出品
以PyCharm为例:
PyPI与PyPA
PyPI 是 Python 软件包的中央仓库,而 PyPA 是一个致力于改进 Python 软件包管理和分发生态系统的社区组织
PyPI, Python Package Index
- PyPI,全称为 Python Package Index,是 Python 社区维护的官方软件包仓库,用于存储和分发 Python 软件包(包括库、工具等)的中央仓库。
- 开发者可以将自己编写的 Python 软件包上传到 PyPI,使其可以被其他人轻松安装和使用。
- 使用
pip工具,可以从 PyPI 安装 Python 软件包,例如:pip install package-name。 - PyPI 提供了一个 Web 界面,允许开发者上传、管理和搜索 Python 软件包。
PyPA, Python Packaging Authority
- PyPA,全称为 Python Packaging Authority,是一个由社区维护的组织,致力于改进和标准化 Python 软件包管理和分发生态系统。
- PyPA 的目标是提高 Python 软件包管理的质量、可靠性和一致性,以使 Python 开发更加愉快和可靠。
- PyPA 维护了一系列工具和标准,用于帮助开发者创建、分发和管理 Python 软件包。其中一些重要工具包括:
setuptools:用于构建和分发 Python 软件包的工具。wheel:用于构建和分发二进制轮子(wheel)格式的 Python 软件包。twine:用于上传 Python 软件包到 PyPI 的工具。pypa/pip:Python 的包管理工具,用于安装和管理 Python 软件包。
- PyPA 也制定了一些标准,如 PEP 517 和 PEP 518,以规范 Python 软件包构建和依赖管理。
包分发工具
分发和相关辅助工具
disutils
distribute utils,包分发工具,Python标准库,
setuptools
基于disutils开发,三方最强包分发工具,https://setuptools.pypa.io/en/latest/setuptools.html
PEP 518 pyproject.toml
pbr,打包辅助工具
辅助工具,twine
源码包与二进制包
无论什么语言,包都分为源码包与二进制包
源码包
二进制包
二进制包的安装过程省去了编译的过程,直接进行解压安装,所以安装速度较源码包来说更快。
由于不同平台的编译出来的包无法通用,所以在发布时,需事先编译好多个平台的包。
Egg 格式是由 setuptools 在 2004 年引入,而 Wheel 格式是由 PEP427 在 2012 年定义。Wheel 的出现是为了替代 Egg,它的本质是一个zip包,其现在被认为是 Python 的二进制包的标准格式。
Wheel 和 Egg 的主要区别:
- Wheel 有一个官方的 PEP427 来定义,而 Egg 没有 PEP 定义
- Wheel 是一种分发格式,即打包格式。而 Egg 既是一种分发格式,也是一种运行时安装的格式,并且是可以被直接 import
- Wheel 文件不会包含 .pyc 文件
- Wheel 使用和 PEP376 兼容的 .dist-info 目录,而 Egg 使用 .egg-info 目录
- Wheel 有着更丰富的命名规则。
- Wheel 是有版本的。每个 Wheel 文件都包含 wheel 规范的版本和打包的实现
- Wheel 在内部被 sysconfig path type 管理,因此转向其他格式也更容易
setup.py
使用setup.py构建包
源码包
# 构建源码包,win默认zip,linux默认tar.gz,可使用format参数指定
python setup.py sdist --format=gztar,zip
二进制包
# win exe
python setup.py bdist_wininst
# linux rpm
python setup.py bdist_rpm
# egg
python setup.py bdist.egg
python setup.py bdist_wheel
# 多个生成
python setup.py bdist
多种格式打包
python setup.py sdist bdist_wheel
使用setup.py安装包
# 构建包
python setup.py build
# 安装包,若没有构建会自动构建
python setup.py install
python setup.py install --prefix=/my/prefix
# 在系统环境中创建软连接指向包所在目录,修改包后无需安装即可生效,便于开发
python setup.py develop
发布到pypi
.pypirc
[distutils]
index-servers = pypi
[pypi]
username:xxx
password:xxx
# 注册项目
python setup.py register
# 上传项目
python setup.py upload
包管理工具
pip
Python环境安装完后自带pip。
# 查看把版本
pip -V
# 安装包
pip install virtualenv
pip install --upgrade package
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package
pip install --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple package
pip install wheel # wheel格式
pip wheel --wheel-dir=/local/wheels pkg # wheel格式
pip install -e # 会调用python setup.py develop
pip install git+<git仓库地址>@<f> # 从git安装包
# 卸载包
pip uninstall package
# 显示所有安装的包
pip list
# 显示包的信息
pip show package
# pip版本降级
python -m pip install pip==9.0.3
# 通过requirements.txt文件安装包
pip install -r requirements.txt
# 导出包
pip freeze > requirements.txt
# 临时使用清华源安装包
pip install redis -i https://pypi.tuna.tsinghua.edu.cn/simple
# 永久配置清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip通过VCS安装模块
https://pip.pypa.io/en/latest/cli/pip_install/
Anaconda
# 包安装与卸载
conda install --name myenv package_name
conda remove --name myenv package_name
退出virtual env python虚拟环境
deactivate
conda create -n dsv2_env python=3.11
以管理员身份打开PowerShell 输入 set-executionpolicy remotesigned,其中在默认的CMD 中可以使用 activate.bat 来激活环境变量,在PowerShell 或者是Windows10 中 新发布Terminal 中需要使用 Activate.ps1 文件来激活,默认情况下直接激活则会出现
PS <YouProjectPath>\venv\Scripts> .\activate.ps1
.\activate.ps1 : 无法加载文件 <YouProjectPath>\venv\Scripts\Activate.ps1,
因为在此系统上禁止运行脚本。有关
详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ .\activate.ps1
+ ~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [],PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
pipenv
pip install pipenv
pipx
# pipx 会被默认安装到用户家目录下,使用环境变量控制安装目录
setx PIPX_HOME "D:\pipx"
setx PIPX_BIN_DIR "D:\pipx\bin"
pip install pipx
pipx 用于管理 Python 编写的命令行工具,Python 编写的命令行工具需要 Python 环境才得以运行,而在平时安装各种包时有可能会影响到这些命令行工具的依赖,于是应当为 Python 编写的命令行工具单独创建一个虚拟环境,pipx 就是负责创建虚拟环境并安装和管理这些Python编写的命令行工具的的,例如 poetry 就通常通过 pipx 安装以独立于正常 Python 环境。
pipx 会为每一个 Python 命令行工具生成一个虚拟环境并安装该命令行工具。
Poetry
poetry install 会将包默认安装到当前命令行所引用的 Python 环境,即当前命令行是虚拟环境,就会安装到该虚拟环境。
poetry --version
- Pyenv :主要专注于 Python 版本的管理,可以方便地在系统中安装和切换不同版本的 Python 解释器,但本身不直接管理虚拟环境或项目依赖。
- Poetry :是一个现代的 Python 包管理和环境管理工具,不仅会自动为每个项目创建和管理独立的虚拟环境,还使用
pyproject.toml文件来管理项目的依赖关系,自动处理依赖关系的解析和安装,确保在不同环境中安装相同的依赖版本,生成的poetry.lock文件可保证项目的可重复性,此外还提供了简便的命令来打包和发布 Python 包到 PyPI 或其他私有仓库,支持语义化版本管理。
使用场景
- Pyenv :当你需要在系统中使用多个不同版本的 Python,或者需要为不同的项目指定不同的 Python 版本时,Pyenv 是一个很好的选择。例如,你有一个项目需要使用 Python 3.7,而另一个项目需要使用 Python 3.9,你可以使用 Pyenv 来安装和切换这两个版本。
- Poetry :适用于需要精细依赖管理和虚拟环境管理的复杂 Python 项目,以及需要自动化和简化包发布流程的项目。例如,一个大型的 Web 应用开发项目,有多个依赖包且需要确保团队成员的开发环境一致,同时还需要将项目打包发布到 PyPI,此时使用 Poetry 可以很好地满足这些需求。