python多版本与虚拟环境
这篇纯python技术文章,我自己平时也会用到,在此记录一下。
为什么会用到多个Python版本?
用macOS和Ubutntu的同学都知道系统默认安装的Python2.7.x,然后,我们平时python开发用的python3,所以,需要额外安装一个Python3.x的版本。
之前,我想是使用robotframework-ride但它只支持python3.7,于是,我安装python3.7。(注:现在已经支持3.8了)
前几天,我想学习一下tinygrad,他支持python3.8,于是,我又装了3.8。
python多版本管理
- 使用Where查找安装的
python、python3路径。
- macOS终端:
❯ where python
/usr/bin/python # 2.7.16
❯ where python3
/Library/Frameworks/Python.framework/Versions/3.7/bin/python3 # 3.7.9
/usr/local/bin/python3 # 3.7.9
/usr/bin/python3 # 3.7.3
- windows命令提示符
❯ where python
C:\Python37\python.exe
C:\Python38\python.exe
C:\Users\fnngj\AppData\Local\Microsoft\WindowsApps\python.exe
- 为不同的python 改名字。
比如,C:\Python38\python.exe文件拷贝改名为C:\Python38\py8.exe,那我就可以愉快的使用py8这个命令了。
❯ py8
Python 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
- 为不同的python 安装库。
每个python版本下面都有 pip,我们在使用pip的安装库的时候,经常不知道他安装在哪个python下面了。
❯ py8 -m pip install selenium
❯ py8 -m pip show selenium
...
Location: c:\python38\lib\site-packages
...
带上 python -m的前缀,这样永远不会装错。
为什么会用虚拟环境?
作为一个使用python开发过大型项目的同学,一定会碰到python库的版本依赖。
例如 直接依赖:
- A项目:使用 django 2.2
- B项目:使用 django 3.1
还有复杂的间接依赖:
- A项目:使用A框架 ——> 依赖 requests 1.10
- B项目:使用B库 ——> 依赖 requests 2.x
而你又需要同时开发A、B两个项目,总不能在运行不同的项目的时候,就把不同项目的依赖库装一遍吧!
虚拟环境管理
python的虚拟环境管理工具挺多的,virtualenv、virtualenvwrapper、pipenv,pyenv。其实明白了原理这些工具都不复杂,这里以pipenv为例。
- 安装pipenv
❯ pip install pipenv
- 创建虚拟环境
进入到项目目录,创建虚拟环境。
❯ cd mypro # 进入项目目录
❯ pipenv --python py8 # 指定基于哪个python版本创建虚拟环境。
Creating a virtualenv for this project...
Pipfile: D:\github\mypro\Pipfile
Using C:/Python38/py8.exe (3.8.6) to create virtualenv...
...
Successfully created virtual environment!
Virtualenv location: C:\Users\fnngj\.virtualenvs\mypro-D2Xyk8c9
- 安装依赖
这一步从Pipfile.loc中安装依赖。
❯ pipenv install
Installing dependencies from Pipfile.lock (db4242)...
================================ 0/0 - 00:00:00
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
- 进入虚拟环境
❯ pipenv shell
Launching subshell in virtual environment...
5.可以在虚拟环境里面安装你想要的应用了。
v3.8.6 ((mypro)) ❯ pip install xxx
6.退出虚拟环境
v3.8.6 ((mypro)) ❯ exit;
7.删除虚拟环境
❯ pipenv --rm
注:其实这两个管理在pycharm集成的就有,可是上来就完全依赖pycharm开发python的同学很难搞清楚。那么,本文也有助于你更好的使用 pycharm。
python多版本与虚拟环境的更多相关文章
- pyenv、virtualenv、virtualenvwrapper三种python多版本介绍
今天有把此前接触过的三种python实现多版本环境用到的软件pyenv.virtualenv.virtualenvwrapper,了解了一番,现做如下总结: 一.pyenv: 是针对python多版本 ...
- 使用pyenv与pyenv-virtualenv管理Python版本与虚拟环境
在上一篇博客中,我介绍了如何在ubutnu 18.04中安装pyenv.这一次我将介绍如何使用pyenv与pyenv-virtualenv管理Python版本与虚拟环境. 0.相关命令 首先使用pye ...
- Python linux 上的管理工具 pyenv 安装, pip 使用, python项目(版本分割, 项目分割, 虚拟环境创建)
01: 假设你有一个最小环境安装的 centos-6.x 的linux操作系统 02: 安装 git => yum -y install git 03: 安装依赖 => yum -y in ...
- mac10.10 打造Python多版本虚拟环境
一.简介 1.在操作系统mac10.10(yosemite)中搭建Python多版本虚拟环境: 2.多版本虚拟环境包含三个含义: 在一个操作系统中安装多个版本的Python,不同版本可以随意切换,例如 ...
- Ubuntu环境下非root用户指定版本Python的安装及虚拟环境virtualenv的使用
Ubuntu环境下非root用户指定版本Python的安装及虚拟环境virtualenv的使用 参考博客: https://blog.csdn.net/leviopku/article/details ...
- Ubuntu18.0 解决python虚拟环境中不同用户下或者python多版本环境中指定虚拟环境的使用问题
一. 不同用户下配置virtualenvwrapper的问题 问题描述: 安装virtualnev和virtualnevwrapper之后,在.bashrc进行virtualenvwrapper的相关 ...
- Windows下利用virtualenvwrapper指定python版本创建虚拟环境
默认已安装virtualenvwrapper 一.添加环境变量(可选) 在系统环境变量中添加 WORKON_HOME ,用来指定新建的虚拟环境的存储位置,如过未添加,默认位置为 %USERPROFIL ...
- Python:Anaconda安装虚拟环境到指定路径
1 曾经的困扰 有段时间,想使用基于不同python版本的anaconda,就直接从官网下载了两个不同的anaconda版本进行安装.刚开始的时候,还觉得也没啥问题.用了一小段时间,在安装其他的第三方 ...
- 安装python发行版本,并用conda来管理Environments,Python,packages
简介:anaconda指的是一个开源的python发行版本,其包含了conda.Python等180多个科学包及其依赖项. 因为包含了大量的科学包,Anaconda 的下载文件比较大(约 515 MB ...
随机推荐
- React Slingshot
React Slingshot React 弹弓 https://github.com/coryhouse/react-slingshot https://decoupledkit-react.rea ...
- what's the difference amount of pdf, epub, and mobi format
what's the difference amount of pdf, epub, and Mobi format What is the difference between pdf, epub ...
- LeetCode & tree & binary tree
LeetCode & tree & binary tree 树 & 二叉树 refs https://leetcode.com/problemset/all/?topicSlu ...
- BGV崛起带动DeFi重回大众视野
自10月份比特币二次发力以来,DeFi越来越被市场忽略,这当然也有比特币给力和DeFi低迷的双重原因,但随着Baccarat的平台币BGV于A网的正式上线,近期DeFi重新回到了大众的视野中. 正如区 ...
- ubuntu无法连接有线网
问题描述: ubuntu下仅能连接无线网,不能连接有线网,在有线网的下面是没有选项可供连接. 解决方法: 编辑 /etc/network/interfaces 这个文件 将里面仅仅写两句话 auto ...
- C++算法代码——阿克曼函数
题目来自: 题目描述 阿克曼( Ackmann) 函数 A(x, y) 中, x, y 定义域是非负整数, 函数值定义为: 输入 输入两个数,表示m和n. 两个数均不超过10. 输出 输出一个数,表示 ...
- JDK源码阅读-FileOutputStream
本文转载自JDK源码阅读-FileOutputStream 导语 FileOutputStream用户打开文件并获取输出流. 打开文件 public FileOutputStream(File fil ...
- HashMap扩容后是否需要rehash?
需要,因为要重新计算旧数组元素在新数组地址.HashMap在JDK1.8中的rehash算法(也就是扩容后重新为里面的键值对寻址的算法)进行优化.hash寻址算法是 index =(n - 1) &a ...
- Spirng 循环依赖报错:Requested bean is currently in creation: Is there an unresolvable circular reference?
1:前言 最近在项目中遇到了一次循环依赖报错的问题,虽然解决的很快,但是有些不明白的地方,特此记录. 在此我把 bean 的结构和 注入方式单独拎出来进行演示 1.1:报错提示 1.2:错误日志 Ex ...
- Redis 内存淘汰机制详解
一般来说,缓存的容量是小于数据总量的,所以,当缓存数据越来越多,Redis 不可避免的会被写满,这时候就涉及到 Redis 的内存淘汰机制了.我们需要选定某种策略将"不重要"的数据 ...