如何正确使用 Pyenv 和 venv?

2024-03-11

文章阅读:

Python 虚拟环境:入门 https://realpython.com/python-virtual-environments-a-primer/,

Pyenv – 为特定项目安装多个Python版本 https://www.tecmint.com/pyenv-install-and-manage-multiple-python-versions-in-linux/,

如何管理多个Python版本和虚拟环境 https://medium.freecodecamp.org/manage-multiple-python-versions-and-virtual-environments-venv-pyenv-pyvenv-a29fb00c296f

假设我们有这些目录:

  • ~/Projects/PyA:使用 Python 3.4.3 和 Django 2.0
  • ~/Projects/PyB:使用 Python 3.5.1 和 Django 2.1
  • ~/Projects/PyC:使用 Python 3.5.6 和 Django 2.2
  • ~/Projects/PyD:使用 Python 3.2 和 python-igraph

首先,我们安装所需的 Python 版本:

pyenv install 3.4.3
pyenv install 3.5.1
pyenv install 3.5.6
pyenv install 3.2

我的问题从这里开始:

我应该这样做吗?

cd ~/Projects/PyA && pyenv local 3.4.3 && python3.4 -m venv proA
cd ~/Projects/PyB && pyenv local 3.5.1 && python3.5 -m venv proB
cd ~/Projects/PyC && pyenv local 3.5.6 && python3.5 -m venv proC
cd ~/Projects/PyD && pyenv local 3.2 && python3.2 -m venv proD

何时使用虚拟环境的唯一目录?推荐哪个选项?为什么?

我应该如何安装上面列出的每个项目包?

我应该使用virtualenvwrapper?

如何轻松或轻松地在项目之间切换(在此过程中更改 Python/虚拟环境)?

在 Ruby 中,有一个名为Gemfile我可以在其中设置为当前项目安装哪些 gem(及其各自的版本),这是一个非常好的主意。 Python 有类似的东西吗?

PS:我用的是架构Linux https://en.wikipedia.org/wiki/Arch_Linux as guest for a Vagrant https://en.wikipedia.org/wiki/Vagrant_%28software%29 box.


何时使用虚拟环境的唯一目录?哪个 推荐选项?为什么?

每个虚拟环境都“存在”在其自己的文件夹中。您安装的所有软件包都将转到那里,特别是如果每​​个环境都有不同的 Python 版本。


我应该如何安装上面列出的每个项目包?

创建项目环境后切换到项目环境时,请参阅下面我的原始答案。所有安装的软件包都将专门安装到您当前正在使用的虚拟环境中。

您始终可以通过键入来检查当前正在使用哪个 Python 解释器

which python

在终端中,您当前已激活项目环境。此外您还可以检查

which pip

确保您是否正在使用pip install somepackage您的目标是正确的 Python 解释器。如果你想固定包裹,你可以这样做

pip freeze > requirements.txt

任何时候,当前安装的软件包及其版本都将写入文本文件requirements.txt。您现在始终可以使用以下命令创建新环境

pip install -r requirements.txt

我应该使用 virtualenvwrapper 吗?

我总是在每个项目的虚拟环境中工作,因此可能使用特殊包的某些固定版本的其他项目不会受到影响。

如何在项目之间切换(更改Python/虚拟环境 在此过程中)轻松还是无痛?

您可以在您的中定义一个别名~/.bashrc 文件 https://en.wikipedia.org/wiki/Bash_(Unix_shell)#Legacy-compatible_Bash_startup_example or ~/.bash_aliases。在终端中,打开(在我的示例中)~/.bashrc使用文本编辑器,例如Vim https://en.wikipedia.org/wiki/Vim_%28text_editor%29/nano https://en.wikipedia.org/wiki/GNU_nano或您喜欢的一项:

nano ~/.bashrc

在靠近末尾的地方,您可以添加一行带有别名的行,以切换到项目目录并同时激活环境:

alias activate_proj1="cd ~/project_1 && pyenv activate venv_project_1"

所以你只需输入activate_proj1在终端中(制表符补全也可以)并且两个命令都被执行。更改某些内容后,不要忘记再次获取 bash 文件source ~/.bashrc或者只是打开一个新终端。


原答案:

pyenv将处理您需要的一切:

我的工作流程(针对一个项目以使其更具可读性)如下:

pyenv install 3.5.1
cd python_projects
mkdir myproject
cd myproject
pyenv virtualenv 3.5.1 venv_myproject

之后,您可以简单地激活由以下命令创建的virtualenvpyenv using

pyenv activate venv_myproject

这将打开您独特的环境。在这里您可以做所有您想做的事情,例如,使用 pip 等安装软件包。 完成环境设置后,您可以冻结环境并创建需求文件:

pip freeze > requirements.txt

如果需要的话能够重建环境。这样,所有可能需要的开销(设置 PATH 等)都将由 pyenv 处理。

如果您想从事不同的项目,只需激活您需要的环境即可开始!

请注意,您可以使pyenv激活虚拟环境 https://github.com/pyenv/pyenv-virtualenv#activate-virtualenv当你cd终端中的文件夹,将其名称放入您的.python-version文件也是如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确使用 Pyenv 和 venv? 的相关文章

  • docker-compose:容器之间的 Redis 连接被拒绝

    我正在尝试设置一个 docker compose 文件 该文件旨在替换运行多个进程 RQ 工作线程 RQ 仪表板和 Flask 应用程序 的单个 Docker 容器解决方案导师 http supervisord org 主机系统是 Debi
  • 从一个数组中删除另一个数组中的元素

    假设我有这些二维数组A and B 我怎样才能从中删除元素A那些在B 集合论中的补集 A B A np asarray 1 1 1 1 1 2 1 1 3 1 1 4 B np asarray 0 0 0 1 0 2 1 0 3 1 0 4
  • 在 sympy 绘图中,如何获得具有固定纵横比的绘图?

    如果我用这个片段画一个圆 from sympy import x y symbols x y p1 plot implicit Eq x 2 y 2 1 aspect ratio 1 1 我会得到一个像这样的图形窗口 现在长宽比不是我所期望
  • goJS 下拉菜单删除项目

    我有简单的 python Flask goJS 图形应用程序 如下所示 节点和链接文本的源是从应用程序的后端加载的 我将它们设置为model modelData像这样的部分 var graphDataString JSON parse di
  • Flask - 如何从 JSON GET 请求获取参数

    我有一个发出以下 GET 请求的客户端 api GET tasks 5fe7eabd 842e 40d2 849e 409655e0891d 22task 22 22hello 22 22url 22 22 tasks 5fe7eabd 8
  • tkinter 上的“NoneType”对象没有属性“get”错误[重复]

    这个问题在这里已经有答案了 我最近开始使用 python 3 6 进行编码tkinter并尝试创建我自己的项目repl it 该项目是一个简单的交互式待办事项列表 但是我陷入困境并且无法使该功能正常工作 该函数只是简单地获取条目并将其添加到
  • 提取二值图像中的最中心区域

    我正在处理二进制图像 之前使用此代码来查找二进制图像中的最大区域 Use the hue value to convert to binary thresh 20 thresh thresh img cv2 threshold h thre
  • Odoo:如何覆盖原始功能

    在 Odoo 中 每次打开产品表单时都会计算产品的数量 这发生在模型中product product gt function product available 该函数返回一个名为 res 的字典 Example res 8 qty ava
  • 在Python中从整个图像中检测表格部分

    我有一张尺寸为 3500x5000 的图像 现在我只想检测整个图像中的表格部分 如果不能直接进行 OCR 处理 则对其进行裁剪和旋转 经过所有搜索后 我想到了使用裁剪图像中的每个单元格的想法https medium com coinmonk
  • 即使使用标头和 Session 对象,Python requests.get 也会失败并出现 403 禁止

    我正在发出 GET 请求来获取 JSON 它在任何设备上的任何浏览器中都可以正常工作 但不能通过 python 请求 url https angel co autocomplete new tags params query sci tag
  • 使用字体模块的 Tkinter 代码无法从命令行运行?

    我有使用 tkinter 的代码 我可以从 IDLE 运行得很好 但会引发异常AttributeError module object has no attribute font 当它从命令行运行时 其他 tkinter 程序工作正常 但任
  • 从 Cython 代码生成 SIMD 指令

    我需要概述在高性能数字代码中使用 Cython 可以获得的性能 我感兴趣的事情之一是找出优化的 C 编译器是否可以对 Cython 生成的代码进行矢量化 所以我决定写下面的小例子 import numpy as np cimport num
  • 在 CSV 文件的最上面一行写入

    我有这个sample csv 文件 a 1 apple b 2 banana c 3 cranberry d 4 durian e 5 eggplant 并有以下代码 samplefile open sample csv rb rows s
  • 如何使 cx-oracle 将查询结果绑定到字典而不是元组?

    这是我的代码 我想找到一种方法将查询结果作为字典列表而不是元组列表返回 看起来 cx oracle 通过部分文档讨论 绑定 来支持这一点 虽然我不知道它是如何工作的 def connect dsn cx Oracle makedsn hos
  • 如何在Python中一次比较二维数组的2列与另一个数组的列

    我有两个字符串数组 每个数组有三列 我想比较两个二维数组的前两列 有 3 列和 4000 行 如果它们匹配 那么我需要那些匹配的值 但是我的代码不起作用 这是一个示例 array1 1stcolumn 2ndColumn 3rdColumn
  • 添加条件计数器:基于其他列的值的计数器列

    我有一张这样的桌子 id id2 val a red apple a red orange b blue fish c violet beef a yellow banana a black pork 我想根据 id 和 id2 的值创建一
  • 如何从集合中检索元素而不删除它?

    假设如下 gt gt gt s set 1 2 3 我如何获得一个值 任何值 s不做s pop 我想将该项目保留在集合中 直到我确定可以删除它 这只有在异步调用另一个主机之后才能确定 又快又脏 gt gt gt elem s pop gt
  • centos上无法安装Pillow

    我上面有 centos 6 3 和 python 2 6 当我尝试通过 easy install 安装它时 出现以下错误 imaging c 76 20 error Python h No such file or directory In
  • Django 表单中的只读字段

    如何在 Django 表单中将字段设置为只读 我知道如何禁用某个字段 但这不是我想要的 任何帮助 将不胜感激 您可以使用可选的attrs定义时的参数Field 以机智 somefield forms CharField widget for
  • 写入文件的正确方法?

    我想知道这样做是否有什么区别 var1 open filename w write Hello world 并做 var1 open filename w var1 write Hello world var1 close 我发现没有必要

随机推荐

  • 未解析的 Aapt 错误

    在将我计划使用的图像添加到drawables文件夹后 我试图构建我的android应用程序 该项目之前运行得很好 但运行该项目后 出现一条错误消息 显示 Unparsed Aapt Error 该错误显示在 src 文件夹中 我尝试清理我的
  • 安装并加载“rJava”

    由于 rJava 的加载问题 我在加载 Deducer 包时遇到问题 rJava 的安装似乎正确完成 但在调用它加载时却失败了 拜托 有人可以提供一些智慧之光吗 错误 rJava 的 loadNamespace 中的 onLoad 失败 详
  • 如何在没有缩略图的情况下发布 Facebook 链接?

    我想使用以下方式发布 Facebook 链接图形API http developers facebook com docs reference api post 但我希望能够避免使用缩略图 Facebook 的网络界面在发布图像时有一个无缩
  • 在服务中注册接收者

    我有一个service可以从以下位置启动和停止button 但在service我想注册一个接收器来监听短信广播 我只想要service在运行时监听短信 我试过registerReceiver receiver intentfilter 但这
  • 每当输入文本时应用程序崩溃,无法识别的选择器发送到实例

    每当我尝试在文本字段上书写时 我都会遇到这个奇怪的错误 使用我的应用程序会崩溃 NSNull fastCStringContents unrecognized selector sent to instance 0x108e3eaf0 Te
  • 如何在 JavaScript 中正确地将对象从 for 循环推送到数组?

    我想通过 for 循环创建一个包含对象的数组 但有一个问题 我想要的形状如下 data apple label Fruits data banana label Fruits data mango label Fruits 所以我尝试了以下
  • 在 Pytorch 中获取负片(倒置)图像

    我想直接从数据加载器获取图像的负片并将其作为张量提供 有我可以使用的库吗 我试过火炬transforms并没有找到任何 不要费力 只需使用255 image它会给你一个负面的形象 试试吧
  • htaccess 阻止对目录的访问,但允许对文件的访问

    我有这样的情况 我正在 Zend Framework 中开发应用程序 htaccess 指向每个请求 索引 php 如果请求路径上存在某个文件或目录 则 htaccess 允许访问这些文件 例如 css js 图像等 现在我有这样的链接 e
  • std::vector::resize() 与 std::vector::reserve()

    评论区里有一个话题这个帖子 https stackoverflow com a 13017983 1629821关于使用std vector reserve vs std vector resize 这是原始代码 void MyClass
  • 两个自定义(角度)元素之间的通信

    两个自定义 角度 元素之间的通信 假设有两个自定义元素 login button
  • 关于类类型静态数组的空初始化

    当我运行静态代码分析器 QACPP 时 我收到警告 根据 QACPP 文档 初始化为 0 仅适用于内置类型 初始化类型对象的数组A 必须使用 如下 int i 5 0 Only works with built in types A a 5
  • SQL 查询性能和 dropcleanbuffers

    有一个你必须运行的 最佳实践 DBCC FREESESSIONCACHE DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS 在对 SQL 查询进行性能分析之前 然而 例如后一个 DROPCLEANBUFFER
  • 如何开始信息提取?

    您能否推荐一个培训路径来开始并变得非常擅长信息提取 我开始阅读它是为了做我的一个爱好项目 很快意识到我必须擅长数学 代数 统计 概率 我读过一些关于不同数学主题的入门书籍 而且非常有趣 寻找一些指导 请帮忙 更新 只是为了回答其中一条评论
  • 向 Google Play Android Developer API 发出 HTTP post 请求

    我正在尝试授权 Google Play Android Developer API 我正处于需要发出 HTTP POST 请求以交换访问令牌和刷新令牌的授权代码的步骤 Google https developers google com a
  • 地图中的键类型不匹配:预期 .. 文本,收到 ... LongWritable

    我有一个简单的 hadoop 应用程序 它获取一个 CSV 文件 然后用 分割条目 然后计算第一个项目 以下是我的代码 package com bluedolphin import java io IOException import ja
  • 创建 webdriver 后 Selenium firefox 配置文件更新下载目录

    我想知道启动驱动程序后如何更新 更改 selenium 中的下载位置 在创建配置文件和启动网络驱动程序期间设置下载目录不是问题 启动 webdriver 根据数据类型更改目录后会出现此问题 例如 如果dl doc是word保存在Docs W
  • Hibernate + Spring 异常:未知实体

    服务器启动时我遇到异常 服务器使用 Intellij IDEA 启动 我不知道如何解决它 我是休眠和春季的新手 提前致谢 SEVERE Context initialization failed org springframework be
  • Ruby on Rails 可以部署在 Azure 网站上吗?

    我可以在 Azure 网站上部署 Ruby on Rails 吗 还没有 目前仅支持 NET 和 PHP
  • 在Python中的re.sub中获取组匹配

    在 Perl 中 我可以同时进行替换并捕获小组比赛 例如 my string abcdef123 string s d my groupMatched 1 groupMatched is 123 在 Python 中 我可以使用 re su
  • 如何正确使用 Pyenv 和 venv?

    文章阅读 Python 虚拟环境 入门 https realpython com python virtual environments a primer Pyenv 为特定项目安装多个Python版本 https www tecmint