Python 버전을 마음대로 전환하는 방법에 대해 이야기해 보겠습니다.

WBOY
풀어 주다: 2023-04-13 18:58:07
앞으로
1517명이 탐색했습니다.

머리말

일상적인 개발 작업에서 이런 상황에 직면한 적이 있는지 모르겠습니다:

  • 프로젝트 A는 Python 2.7 버전을 사용하여 개발되었습니다(역사적 문제로 인해 업그레이드되지 않았을 수 있습니다)
  • 프로젝트 B는 Python 2.7을 사용하여 개발 Python 버전 3.10.4는request==2.25.1 버전을 사용한다고 가정하여 개발되었습니다
  • 프로젝트 C는 request==2.27.1 버전을 사용한다고 가정하여 Python 3.10.4로 개발되었습니다

첫 번째 질문: Python 버전을 보면 Python 2.x와 Python 3.x의 차이가 꽤 크고, 버전이 너무 많으면 관리하기가 어렵습니다.

두 번째 질문: 요청 버전이 프로젝트 B와 프로젝트 C에 아무런 영향을 미치지 않을 수도 있습니다. 그러나 다른 프로젝트에서 동일한 패키지의 다른 버전을 사용하면 큰 영향을 미칠 수 있습니다. 그런 다음 이때 버전을 구별해야 하므로 동일한 Python 버전은 두 가지 버전의 패키지를 사용해야 합니다. 분명히 이 시나리오에서는 패키지 관리가 문제가 됩니다. 서로 다른 패키지 환경이 서로 간섭하지 않도록 하는 것이 매우 중요합니다. 일상적인 프로젝트 개발 중에 필요하고 기본적인 요구 사항입니다. 그렇다면 가장 좋은 방법은 두 개의 가상 환경입니다.

그렇다면 궁극적으로 다양한 버전의 인터프리터를 관리하는 문제를 해결하고 다양한 패키지 버전을 제어할 수 있는 기능을 제공할 수 있는 솔루션이 있습니까? 물론 pyenv가 있습니다.

1. pyenv란?

Pyenv는 Ruby 커뮤니티에서 포크된 Python 환경 관리 도구로, 전역 Python 인터프리터 버전을 쉽게 전환할 수 있으며 virtualenv의 편리한 관리 패키지와 결합할 수 있습니다. pyenv를 설치하면 다음과 같이 $PATH에 환경 변수가 추가됩니다.

❯ echo $PATH
/Users/allenjol/.pyenv/plugins/pyenv-virtualenv/shims:/Users/allenjol/.pyenv/shims:/usr/local/bin:/usr/local/sbin
로그인 후 복사

그래서 pyenv는 실제로 PATH 환경 변수를 제어하여 Python 버전을 전환합니다. PATH 경로 시작 부분에 shim 경로를 삽입하여 Python에서 버전 제어를 구현합니다.

2. pyenv, virtualenv, Pipenv의 관계와 차이점

앞서 언급했듯이 pyenv는 Python 버전을 제어하고 virtualenv는 Python용 비교적 성숙한 가상 환경 관리 도구이며, Pipenv는 저자 Kenneth Reitz가 작성한 도구입니다. 요청 패키지의 Python 패키지 관리 도구로서 가상 환경을 생성할 수도 있습니다. 이 문서에서는 지금은 이 도구에 대해 설명하지 않지만 이후 문서에서 소개할 것입니다.

pyenv는 Python 인터프리터 버전 관리에 중점을 두고 있으며 Python 버전을 마음대로 전환할 수 있으며 특정 가상 환경 디렉터리를 지정할 필요가 없습니다.

3.가상환경 pyenv

CentOS7에서 pyenv 설치

git clone https://github.com/pyenv/pyenv.git ~/.pyenv
로그인 후 복사

MacOS에서 pyenv 설치

brew update
brew install pyenv
로그인 후 복사

MacOS에서 네트워크 문제로 인해 Brew Well을 사용할 수 없는 경우 해결방법은 2가지

  • 소스 변경
  • 참고 https://sre.ayunw.cn/posts/terminal_configure_proxy_with_clash/ 이 글의 방법을 사용하여 프록시를 설정하세요

환경 변수 설정

# bash下设置环境变量
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

source ~/.bashrc

# zsh下设置环境变量(我是iterm2+zsh)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc

source ~/.zshrc
로그인 후 복사

pyenv 버전 확인

pyenv --version
로그인 후 복사

4. 명령줄 사용 방법

# 查看当前版本
pyenv version
# 查看所有版本
pyenv versions
# 查看有哪些版本可供安装
pyenv install --list
# 安装python 3.10.4版本
pyenv install 3.10.4
# 安装一个版本后rehash一下,让pyenv知道管理的Python版本信息
pyenv rehash

# 卸载
pyenv uninstall 3.10.4
# 查看所有版本
❯ pyenv versions
system
* 3.10.4 (set by /Users/allenjol/.pyenv/version)

# 切换全局的Python版本,表示切换为系统的Python版本
pyenv global system
# 表示切换为pyenv的3.10.4版本
pyenv global 3.10.4
로그인 후 복사

5. 패키지 관리 플러그인 pyenv-virtualenv

pyenv-virtualenv 설치

Linux에서 설치

git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
 
# 配置环境变量
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
source ~/.bash_profile
로그인 후 복사

MacOS에서 설치

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

# MacOS的zsh
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
exec "$SHELL"

# 方法二
brew install pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
exec "$SHELL"
로그인 후 복사

pyenv-virtualenv를 사용하세요

# 创建venv环境
pyenv virtualenv venv3.10.4
# 激活venv
pyenv activate venv3.10.4
pyenv version

# 退出venv环境
pyenv deactivate venv3.10.4

# 删除虚拟环境
pyenv uninstall venv3.10.4
로그인 후 복사

Python 가상 환경을 전환하면 pip와 가상 환경 패키지가 대상 환경으로 전환됩니다. 원래 환경과는 아무런 관련이 없습니다. 따라서 이런 방식으로 Python 인터프리터 환경과 패키지의 버전을 효과적으로 격리할 수 있습니다.

위 내용은 Python 버전을 마음대로 전환하는 방법에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:51cto.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!