使用PyCharm,可以解决各种版本问题…
brew
brew卸载python
要卸载通过Homebrew安装的Python,可以执行以下步骤:
打开终端。
运行以下命令,以查看系统上安装的所有Python版本:
brew list | grep python
该命令会输出所有以 “python” 开头的包,其中可能包括多个Python版本。
- 运行以下命令,以卸载指定的Python版本:
brew uninstall python@<version>
其中,
- 如果你安装了 pip,也可以使用以下命令卸载它:
brew uninstall pipenv
这将卸载 pipenv,以及所有通过 pipenv 安装的 Python 包。
- 如果你想完全卸载 Homebrew,可以运行以下命令:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
这将卸载 Homebrew,以及所有通过 Homebrew 安装的软件包。请注意,此命令将完全删除 Homebrew,包括它所安装的任何软件包。因此,如果你只想卸载 Python,不想删除 Homebrew 和其他软件包,请不要运行此命令。
pyenv
brew install pyenv
如果下载太慢,可以浏览器下载下来,放到这个目录,执行 python install -v 下载包
使用pyenv install 一些特定版本时会报错,
https://issueantenna.com/repo/pyenv/pyenv/issues/2284
苹果的锅..
可以安装上图指定的这几个已修复的版本
pyenv-virtualenv 属于锦上添花,不是很必要,可参考pyenv,让你轻松切换各种python版本
mac m1只支持到3.8
想安装3.8以下的会有点麻烦~
pyenv或conda
在 macOS 上,你可以使用多个工具来管理和切换 Python 版本。以下是两种常用的方法:
pyenv:
pyenv 是一个轻量级的 Python 版本管理工具,可以在 macOS 上安装和管理多个 Python 版本。使用 pyenv,你可以轻松地切换系统中使用的默认 Python 版本,也可以为每个项目选择特定的 Python 版本。首先,使用 Homebrew 安装 pyenv:
1
brew install pyenv
安装完成后,你可以使用以下命令来安装和切换 Python 版本:
1
2
3
4
5
6
7
8
9
10
11# 安装特定版本的 Python
pyenv install <version>
# 切换全局默认 Python 版本
pyenv global <version>
# 在当前 shell 中切换 Python 版本
pyenv shell <version>
# 在项目目录中设置特定 Python 版本
pyenv local <version>替换
<version>为你想要安装或切换到的 Python 版本号。conda:
conda 是一个流行的环境和包管理器,可以用于在 macOS 上安装和管理多个 Python 版本。使用 conda,你可以创建独立的 Python 环境,并在每个环境中选择不同的 Python 版本。如果你已经安装了 Anaconda 或 Miniconda,可以使用以下命令来创建和管理环境:
1
2
3
4
5
6
7
8# 创建一个新的 Python 环境
conda create -n myenv python=<version>
# 激活环境
conda activate myenv
# 切换 Python 版本
conda install python=<version>替换
<version>为你想要安装或切换到的 Python 版本号。如果尚未安装 Anaconda 或 Miniconda,你可以从 Anaconda 官方网站下载适合 macOS 的 Anaconda 或 Miniconda 安装程序,并按照安装说明进行安装。
无论你选择使用 pyenv 还是 conda,这些工具都提供了灵活的方式来安装、切换和管理不同版本的 Python。根据你的需求和偏好,选择其中一种工具即可。
20240810补记:
linux上面用venv
比如如果某个requirements.txt需要使用python3.8才能执行
1 | pip install virtualenv |
每次用都要source一下
但这样有个坑,如果要对某个python脚本配置定时任务,如
1 | */15 * * * * cd /home/ubuntu/chenjun_script && source venv/bin/activate && python /home/ubuntu/chenjun_script/user_portrait_contract_prod.py >> /home/ubuntu/chenjun_script/user_portrait_contract_prod.log |
source venv/bin/activate 其实是没效果的…因为crontab不认shell的环境变量…
需要 写个脚本,然后在crontab里执行那个脚本
1 | 0 10 * * 1 cd /home/ubuntu/chenjun_script && /home/ubuntu/chenjun_script/use_venv.sh && python /home/ubuntu/chenjun_script/db_data_cmp.py >> /home/ubuntu/chenjun_script/db_data_cmp.log |
实际上我用这种方式测了下好像也不行…还是老老实实用下面的,指定python版本
1 | 0 10 * * 1 cd /home/ubuntu/chenjun_script && python3.9 /home/ubuntu/chenjun_script/db_data_cmp.py >> /home/ubuntu/chenjun_script/db_data_cmp.log |
分享一次Linux任务计划crontab不执行的问题排查过程
crontab中需要source venv/bin/activate ,直接写在crontab中好像不生效,需要如何操作?
在 crontab 中使用 source venv/bin/activate 来激活虚拟环境确实可能会遇到问题。这是因为 crontab 任务是在一个独立的环境中运行的,无法直接访问你的 shell 环境变量。
有几种解决方案:
使用 bash 脚本
可以创建一个 bash 脚本文件,在脚本中激活虚拟环境,然后在 crontab 中调用这个脚本。
1
2
3
source /path/to/venv/bin/activate
# 在这里写你的任务代码将这个脚本保存为
cron_task.sh,然后在 crontab 中使用:1
* * * * * /path/to/cron_task.sh
使用 shell 登录方式
在 crontab 中使用
bash -l -c来以登录 shell 的方式运行任务,这样就可以读取到正确的环境变量。1
* * * * * bash -l -c 'source /path/to/venv/bin/activate && python /path/to/script.py'
设置环境变量
在 crontab 条目的开头设置所需的环境变量,这样就不需要
source了。1
2
3VIRTUAL_ENV=/path/to/venv
PATH=$VIRTUAL_ENV/bin:$PATH
* * * * * python /path/to/script.py使用 systemd 服务
如果你的系统使用 systemd,可以创建一个 systemd 服务单元来运行任务,并在服务文件中设置好虚拟环境。这样可以确保任务在正确的环境中运行。
总之,在 crontab 中使用虚拟环境需要一些额外的处理,上述方法都可以有效解决这个问题。具体选择哪种方式,可以根据你的系统环境和个人习惯来决定。
ubuntu 18.04如何使用pyenv安装python3.10
好的,我理解你想在Ubuntu 18.04上使用pyenv安装Python 3.10。这是一个很好的选择,因为pyenv可以让你管理多个Python版本而不影响系统自带的Python。让我们一步步来完成这个过程:
首先,安装pyenv所需的依赖:
1
2
3
4sudo apt update
sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git使用curl安装pyenv:
1
curl https://pyenv.run | bash
设置环境变量。将以下行添加到你的
~/.bashrc文件末尾:1
2
3export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
注意!不是执行这三行命令,而是把这三行加到~/.bashrc文件中!!
重新加载shell配置:
1
source ~/.bashrc
验证pyenv安装:
1
pyenv --version
使用pyenv安装Python 3.10:
1
pyenv install 3.10.0
注意:这个过程可能需要一些时间,因为它会从源代码编译Python。
设置Python 3.10为全局版本(可选):
1
pyenv global 3.10.0
验证安装:
1
python --version
这应该显示”Python 3.10.0”或你安装的具体版本。
如果你只想在特定项目中使用Python 3.10,你可以在项目目录中运行:
1
pyenv local 3.10.0
这样,你就成功使用pyenv在Ubuntu 18.04上安装了Python 3.10。
几点注意事项:
- 如果在安装过程中遇到任何错误,请确保你已经安装了所有必要的依赖。
- 使用pyenv安装的Python版本不会影响系统自带的Python版本。
- 你可以使用
pyenv versions命令查看所有已安装的Python版本。
如果在执行这些步骤时遇到任何问题,请告诉我具体的错误信息,我会很乐意帮你解决。
这样就都是3.10.0了~
在部署chenjun的python服务过程中,遇到了两个问题:
- 通过pyenv安装了python 3.10, 也把相应配置加到了.bashrc最后面:
1 | pyenv 配置 |
source .bashrc 后是3.10
但是新开一个窗口,就还是2.7.17
这是因为 还有个 .profile
把上面这段也加到.profile最后…因为.profile有个export的操作…
1 | ~/.profile: executed by Bourne-compatible login shells. |
我理解您的沮丧。让我们更深入地排查这个问题。看来更改没有按预期生效。我们需要确保我们的配置正确加载并优先于系统默认设置。让’s尝试以下步骤:
- 首先,让我们检查
.bashrc文件是否真的被加载。在 Ubuntu 中,有时候.profile文件会覆盖.bashrc的设置。
1 | # 文件:~/.bashrc |
现在,让我们按照以下步骤操作:
编辑
.bashrc文件:1
nano ~/.bashrc
添加 artifact 中
.bashrc部分的内容到文件末尾。编辑
.profile文件:1
nano ~/.profile
添加 artifact 中
.profile部分的内容到文件末尾。创建或编辑
.bash_profile文件:1
nano ~/.bash_profile
添加 artifact 中
.bash_profile部分的内容。确保 pyenv 已正确安装。如果没有,请安装:
1
curl https://pyenv.run | bash
安装 Python 3.10.0(如果还没有安装):
1
pyenv install 3.10.0
设置全局 Python 版本:
1
pyenv global 3.10.0
重新加载配置:
1
2
3source ~/.bashrc
source ~/.profile
source ~/.bash_profile完全关闭终端,然后重新打开一个新的终端窗口。
检查 Python 版本:
1
python --version
如果按照这些步骤操作后,Python 版本仍然显示为 2.7.17,请尝试以下额外的排查步骤:
检查 PATH 变量:
1
echo $PATH
确保
~/.pyenv/shims或~/.pyenv/versions/3.10.0/bin在 PATH 的最前面。检查 pyenv 是否正确设置:
1
pyenv version
应该显示 3.10.0。
检查系统级的 Python 设置:
1
which python
这应该指向 pyenv 管理的 Python 版本。
如果经过这些步骤,问题仍然存在,可能需要检查是否有其他系统级别的设置覆盖了这些配置。在这种情况下,请告诉我,我们可以进一步调查系统级别的配置文件。
- 遇到的第二个问题上, 经过上面的操作, 新开窗口也已经是python 3.10了.d
但因为部署过程中有用到ansible,还一直是2.7.17
根据下面的询问,最后发现改成这样就行了:
1 | devshare ansible_user=ubuntu ansible_port=22 ansible_host=172.22.0.137 ansible_ssh_private_key_file=/data/ansible/ansiblefordev ansible_python_interpreter=/home/ubuntu/.pyenv/shims/python |
感谢您的反馈。我理解您在使用Ansible时遇到的问题。这个问题出现是因为Ansible默认使用系统的Python解释器,而不是您在本地环境中设置的Python版本。让我们来解决这个问题。
1 | [defaults] |
要解决这个问题,我们需要配置Ansible使用Python 3。以下是具体步骤:
首先,确保目标机器(在这里是 ‘devshare’)上安装了Python 3。通常,Ubuntu 18.04已经预装了Python 3。
创建或编辑Ansible配置文件。如果还没有配置文件,创建一个:
1
nano ~/ansible.cfg
或者如果您想要全局配置:
1
sudo nano /etc/ansible/ansible.cfg
在配置文件中添加上面artifact中的内容。这将强制Ansible使用Python 3。
保存并关闭文件。
现在,当您运行Ansible命令时,添加
-e 'ansible_python_interpreter=/usr/bin/python3'参数来指定Python 3解释器。例如:1
ansible -i /data/ansible/inventory/devshare.ini devshare -m command -a "python3 --version" -e 'ansible_python_interpreter=/usr/bin/python3'
如果您不想每次都添加这个参数,可以在您的inventory文件(/data/ansible/inventory/devshare.ini)中为特定主机或组设置Python解释器。添加如下行:
1
devshare ansible_python_interpreter=/usr/bin/python3
如果您想在playbook中设置,可以添加如下变量:
1
2vars:
ansible_python_interpreter: /usr/bin/python3对于ad-hoc命令,您也可以使用
python3替代python:1
ansible -i /data/ansible/inventory/devshare.ini devshare -m command -a "python3 --version"
这些更改应该解决Ansible使用Python 2.7的问题。请尝试这些方法,看看是否解决了您的问题。如果您仍然遇到困难,请告诉我具体的错误信息或输出,我会很乐意提供进一步的帮助。
我理解您想要为 devshare 主机指定特定的 Python 解释器路径。我们可以轻松地将这个设置添加到您的 inventory 文件中。让我们修改您的 inventory 文件来包含这个新的设置。
1 | [dev_group] |
要添加 ansible_python_interpreter 设置,您只需要在 devshare 主机的行末尾添加这个配置。以下是具体步骤:
打开您的 inventory 文件进行编辑。假设文件位置是
/data/ansible/inventory/devshare.ini:1
nano /data/ansible/inventory/devshare.ini
找到 devshare 的配置行,并在行末添加
ansible_python_interpreter设置。修改后的行应该如上面 artifact 中所示。保存并关闭文件。
这个更改将告诉 Ansible 在连接到 devshare 主机时使用指定的 Python 解释器(在这里是 /home/ubuntu/.pyenv/shims/python)。
现在,当您运行针对 devshare 的 Ansible 命令时,它将使用您指定的 Python 解释器。例如:
1 | ansible -i /data/ansible/inventory/devshare.ini devshare -m command -a "python --version" |
这个命令现在应该返回您期望的 Python 版本。
请注意,这个设置只会影响 devshare 主机。如果您想为所有主机设置相同的 Python 解释器,您可以在 inventory 文件的 [dev_group:vars] 部分添加这个设置,或者在 Ansible 配置文件中全局设置。
如果您在应用这个更改后遇到任何问题,或者需要为其他主机进行类似的配置,请随时告诉我。我很乐意提供进一步的帮助。
2024.12.05
Mac 上面
python3.10 -m venv myenv
source myenv/bin/activate
20250727
- uv python list — 列出uv支持的python版本
- uv python install cpython3.12 — 安装某个python版本 (3.12)
- uv run -p 3.12 xxx.py — 使用特定版本python运行xxx.py
- uv run -p 3.12 python — 运行python交互界面
- uv run xxx.py — 使用系统python或当前工程的虚拟环境运行xxx.py
- uv init — 创建工程
- uv add pydantic_ai — 添加依赖 (pydantic_ai)
- uv tree — 打印依赖树
- uv remove pydantic_ai — 删除依赖
- uv build — 编译工程
sample code: https://gist.github.com/cradiator/b486a3148be3ab63ae7d0c5376fcf783
还有类似的“锈化”库:
ruff(替代 flake8 + black + isort):超快的 Python 代码检查和格式化工具,比 flake8 快 50 倍。
polars(替代 pandas):高性能 DataFrame 计算库,采用 无 GIL、多线程优化,比 pandas 处理大数据快得多。
maturin(替代 setuptools):Rust 编写 Python 扩展的工具,构建速度更快,依赖管理更轻量。
pyo3(替代 Cython):让 Rust 可以直接编写 Python 扩展,比 Cython 更安全、更快。
pyoxidizer(替代 pyinstaller):将 Python 打包成二进制的工具,生成的文件 更小更快,适合分发。
uv(替代 pip):更快的 Python 依赖管理工具,Rust 并行解析,比 pip 快 10 倍
uv比anaconda快很多,但是总体来说,它们不是同一类型的。anaconda能使用conda生态系统,并且自带很多软件比如spyder、jupyter,这些uv都没有。conda生态系统中也有类似uv的新产品pixi,不过pixi目前还缺了一些功能anaconda有它的独特性,但是使用miniconda、micromamba、piix等等,是可以替代anaconda的(就是少了自带的一堆东西),需要conda生态系统的研究者可以使用这些代替anaconda(当然也可以用anaconda,就是anaconda我感觉有点太大了)。一般的开发者,不太适合使用anaconda,对他们来说,有poetry等工具可以使用,而uv是其中最先进的工具。
原文链接: https://dashen.tech/2018/04/28/Python多版本及包安装的问题/
版权声明: 转载请注明出处.