win11安装pyenv和pyenv-venv

环境确认

PowerShell 提供了几个不同的执行策略级别,包括:

  • Restricted:不允许任何脚本运行。这是默认的执行策略,为大多数用户提供了安全的起点。
  • AllSigned:只允许运行由受信任的发布者签名的脚本。
  • RemoteSigned:从本地计算机加载的所有脚本都可以运行,但从 Internet 下载的脚本必须签名才能运行。
  • Unrestricted:允许所有脚本运行。
  • Bypass:绕过执行策略,不执行任何脚本块或配置文件。
  • Undefined:没有设置执行策略。
## 查看当前策略
PS C:\Users\xuyuansheng> Get-ExecutionPolicy
RemoteSigned
#设置为可执行本地脚本 
Set-ExecutionPolicy RemoteSigned

官方文档

使用PowerShell安装

安装pyenv-win

这是管理多版本python的工具

Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "$HOME/install-pyenv-win.ps1";  

& "$HOME/install-pyenv-win.ps1"

常用命令

# 查看版本
pyenv --version
# 查询所有可安装python版本
pyenv install -l
# 设置全局python 版本
pyenv global <version>

安装pyenv-venv

这是管理虚拟环境的工具

Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win-venv/main/bin/install-pyenv-win-venv.ps1" -OutFile "$HOME\install-pyenv-win-venv.ps1";

&"$HOME\install-pyenv-win-venv.ps1"

常用命令

# 查看已经安装的环境
pyenv list envs/python
# 安装虚拟环境
pyenv install  <python-version> <env-name>

缺点:

  • 软件安装的路径都在c盘,所有下载的python文件和虚拟环境文件都在c盘,会使用c盘空间迅速消耗完

使用Git安装(自定义安装)

下载文件

cd d:/JavaProgramFiles
git clone https://github.com/pyenv-win/pyenv-win.git
cd pyenv-win
git clone https://github.com/pyenv-win/pyenv-win-venv.git
## 最终的目录结构
##  D:\JavaProgramFiles\pyenv-win\pyenv-win  pyenv的家目录
##  D:\JavaProgramFiles\pyenv-win\pyenv-win-venv  pyenv-venv的家目录

配置环境变量

## 新增环境变量
PYENV            D:\JavaProgramFiles\pyenv-win\pyenv-win\
PYENV_HOME       D:\JavaProgramFiles\pyenv-win\pyenv-win\
PYENV_ROOT       D:\JavaProgramFiles\pyenv-win\pyenv-win\
PYENV_VENV  D:\JavaProgramFiles\pyenv-win\pyenv-win-venv\
## 环境变量最后的 \ 一定不能丢,不然会出问题

配置PATH路径

##  添加如下三个项
%PYENV%bin
%PYENV%shims
%PYENV_VENV%bin

验证pyenv

## 验证pyenv 
pyenv install -l
pyenv versions

安装python

$ pyenv install 3.11.7
## 
$ pyenv install 3.11.7
:: [Info] ::  Mirror: https://www.python.org/ftp/python
:: [Downloading] ::  3.11.7 ...
:: [Downloading] ::  From https://www.python.org/ftp/python/3.11.7/python-3.11.7-amd64.exe
:: [Downloading] ::  To   D:\JavaProgramFiles\pyenv-win\pyenv-win\install_cache\python-3.11.7-amd64.exe

## 但是国内一般下载不下来,这时候我们可以使用国内镜像手动下载下来  
##  https://mirrors.huaweicloud.com/python/3.11.7/
## 然后放到 D:\JavaProgramFiles\pyenv-win\pyenv-win\install_cache 目录中 
## 最后再执行  pyenv install 3.11.7 
$ pyenv install 3.11.7
:: [Info] ::  Mirror: https://www.python.org/ftp/python
:: [Installing] ::  3.11.7 ...
:: [Info] :: completed! 3.11.7

验证venv

## 验证pyenv-venv
pyenv-venv  
pyenv-venv list envs

问题

## 会提示找不到路径,但是实际上都是正常配置的
$ pyenv-venv
The system cannot find the path specified.

$ where pyenv-venv
D:\JavaProgramFiles\pyenv-win\pyenv-win-venv\bin\pyenv-venv
D:\JavaProgramFiles\pyenv-win\pyenv-win-venv\bin\pyenv-venv.bat

解决

原因:pyenv-venv 这个脚本是通过调用其他脚本运行的,但是另外的脚本内,路径又是写死的

  1. 备份文件 D:\JavaProgramFiles\pyenv-win\pyenv-win-venv\bin 这个目录下的脚本文件全部备份一下

  2. 打开 pyenv-venv 脚本文件,发现它调用的是 pyenv-venv.bat

    #!/bin/sh
    MSYS2_ARG_CONV_EXCL="/C" exec cmd /C call "$(cygpath -wa "$(dirname "$0")")/pyenv-venv.bat" "$@"; # should work on both cygwin and git-bash/mingw
    
  3. 打开 pyenv-venv.bat 脚本文件,发现它调用的是 pyenv-win-venv.bat ,并且目录还是写死的从 %USERPROFILE% 目录下查找

    @ECHO OFF
    @REM Alias for pyenv-win-venv.bat
    "%USERPROFILE%\.pyenv-win-venv\bin\pyenv-win-venv.bat" %*
    
    ## 修改查找路径为如下
    "D:\JavaProgramFiles\pyenv-win\pyenv-win-venv\bin\pyenv-win-venv.bat" %*
    
  4. 打开 pyenv-win-venv.bat ,还是写死路径

    @ECHO OFF
    powershell -File "%USERPROFILE%\.pyenv-win-venv\bin\pyenv-win-venv.ps1" %*
    
    ## 修改查找路径为如下
    powershell -File  "D:\JavaProgramFiles\pyenv-win\pyenv-win-venv\bin\pyenv-win-venv.ps1" %*
    
  5. 打开 pyenv-win-venv.ps1

    ## 第29行,它路径还是写死的 
    $app_dir = "$HOME\.pyenv-win-venv"
    ## 然后全局搜一下 $HOME 发现有三处 
    ## 修改 
    ## 在29行前面添加一个变量  
    $HOME11 = "D:\JavaProgramFiles\pyenv-win"
    ## 原来出现 $HOME 处作出修改 $HOME -->$HOME11  \.pyenv-win-venv --> \pyenv-win-venv
    $app_dir = "$HOME11\pyenv-win-venv"
    ## 208行 和  209行
                Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win-venv/main/bin/install-pyenv-win-venv.ps1" -OutFile "$HOME11\install-pyenv-win-venv.ps1";
                &"$HOME11\install-pyenv-win-venv.ps1"
    
  6. 知识点

    ## 下面这个指定可以打印日志  Write-Host
    Write-Host "Installing env: $subcommand3 using Python v$subcommand2" 
    
    ## 可以在调用ps1脚本时添加 -Debug 开启debug日志 
    ## 如: powershell -File  "D:\JavaProgramFiles\pyenv-win\pyenv-win-venv\bin\pyenv-win-venv.ps1" -Debug %*
    ##  此时,下面这行代码就会输出日志
    Write-Debug-Log "Pyenv Versions Dir: $pyenv_versions_dir"
    

验证修改

## 安装一个虚拟环境
$ pyenv-venv install 3.11.7 env
Installing env: env using Python v3.11.7
posted @ 2024-03-28 09:33  菜阿  阅读(297)  评论(0编辑  收藏  举报