3.环境

予早 2024-10-05 10:12:49
Categories: Tags:

解释器

基础环境搭建

https://www.python.org/downloads/,以[Python3.11.5](https://www.python.org/downloads/release/python-3115/)为例:

Install for Windows

提供安装程序或者压缩包,安装程序点击下一步即可,压缩包解压即可,注意配置根目录到系统环境变量PATH。

Install for Linux

https://blog.csdn.net/dinglinuX/article/details/125885799

编译前提示,可能会遇到如下的坑:

需要从源码编译,以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为例:

PyPI与PyPA

PyPI 是 Python 软件包的中央仓库,而 PyPA 是一个致力于改进 Python 软件包管理和分发生态系统的社区组织

PyPI, Python Package Index

PyPA, Python Packaging Authority

包分发工具

分发和相关辅助工具

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 的主要区别:

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

使用场景