目录
前言
Python程序的生产环境配置和开发环境配置
一、MacOS 和 Linux 下的虚拟环境
python程序的虚拟环境被破坏 或者 不适配服务器的操作系统
1.1 创建和运行虚拟环境(生产环境)
1.1.1 root系统环境 和 conda环境
- sudo 默认会重置 PATH
这个机制叫secure_path,出于安全考虑,故意丢弃当前的 PATH,改用/etc/sudoers里写死的干净路径
# canda base 环境下
# 输出:/usr/bin/python3: No module named uvicorn —— sudo使得身份切换 root
sudo sh restart.sh
sh restart.sh
# 查看base下 PATH
which python3
sudo echo $PATH
# 查看sudo下 PATH
sudo which python3
sudo env | grep PATH
1.1.2 混用包管理
## conda create base 下
##(base) ubuntu@Super-Server:/data/server/hc$ python3 -m venv venv
(venv) (base) ubuntu@Super-Server:/data/server/hc$ pip install -r requirements.txt
# 1. 进入项目目录
cd /path/to/your/project
# 2. 创建虚拟环境(推荐命名为 .venv)
python3 -m venv .venv
# 3. 激活虚拟环境
source .venv/bin/activate
# 4. 验证是否激活成功(终端前缀会出现 (.venv))—— # 预期输出应指向项目内的 .venv 目录
which python
# 5. 退出虚拟环境
deactivate
###################################################################################
## 待实验 sudo python3 -m venv 系统自带的 Python 默认不包含 venv 模块
## 安装包
sudo apt install python3-venv
在 (base) 下用 venv 和 pip
- 路径污染:依然使用了 Conda base 的 Python 解释器(site-packages仓库),半隔离状态,两个环境依然会出现第三方库版本冲突的情况
- 包管理冲突:venv 使用 pip 安装的包,conda不知道,conda更新或者安装新包时会覆盖pip安装的包
1.1.3 conda 生成环境
cd /data/server/hc
conda create -n hc python=3.10
conda activate hc
pip install -r requirements.txt
conda deactivate
############################################################################
conda env create -f environment.yml # 其他方式
1.2 其他命令(开发环境)
确认当前正在使用的python
# 1. 查看当前默认的 Python3 版本
python3 --version
# 2. 查看当前 python3 命令实际指向的文件路径
which python3
# 3. 终极排查:列出系统 $PATH 中所有名为 python3 的可执行文件及优先级
type -a python3
# 4. 询问 Python 解释器自身的绝对路径(最准确,不受别名干扰)
python3 -c "import sys; print(sys.executable)"
包管理 pip 常用命令速查
# 安装包
pip install requests
# 安装指定版本
pip install requests==2.28.0
# 使用国内镜像源(解决网络超时)
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
# 查看当前环境已安装的包
pip list
# 导出当前环境的依赖清单
pip freeze > requirements.txt
# 根据清单一键安装依赖
pip install -r requirements.txt
# 卸载包
pip uninstall requests
多 Python 版本管理 (pyenv):在项目虚拟环境中独立python版本
# 使用 Homebrew 安装
brew install pyenv
# 将 pyenv 初始化脚本写入 zsh 配置文件
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
# 查看可安装的 Python 版本列表
pyenv install --list
# 安装指定版本(例如 3.11.6)
pyenv install 3.11.6
# 查看本地已安装的版本
pyenv versions
# 设置全局默认版本
pyenv global 3.11.6
# 【核心】为当前项目目录绑定特定版本 —— 执行后会在当前目录生成 .python-version 文件
cd /path/to/project
# 单个环境
pyenv local 3.11.6
# 多个环境
pyenv virtualenv 3.11.6 my-project-env
pyenv local my-project-env
二、不同系统间项目的传输
2.1 Linux -> MacOS 间传输项目
可执行文件不同
pip install
# 输出:command not found: pip
ls -la venv/bin/
# 输出:python 文件的权限是 -rw-r--r--
file venv/bin/python3
# 输出:ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux
rm -rf venv
python3 -m venv venv
file venv/bin/python
# 输出:Mach-O 64-bit executable arm64
pip install -r requirement.txt
2.2 Linux -> Linux 间传输项目
注意1:文件环境被破坏
- 下载过程中缺失:activate 权限 缺少执行权限x,
- 下载过程中被破坏:
FTP工具传输,默认的 ASCll 文本模式在传输中,会自行检查文件并根据不同操作系统的换行表示方式进行修改。
所以,Linux服务器之前传输文件,最好选择 Binary 模式。
&spm=1001.2101.3001.5002&articleId=164853479&d=1&t=3&u=7e2e76fc065940c4952b7c9156106474)
1525

被折叠的 条评论
为什么被折叠?



