配置独立于系统的PYTHON环境

配置独立于系统的PYTHON环境

python 当前用户包

一种解决方案是在利用本机的python环境的基础上,将python的包安装在当前user的.local文件夹下
一共有两种方式来实现pip的时候安装到当前user

设置pip配置文件 pip.conf

一种是在~/.pip文件夹下的pip配置文件pip.conf中设置
加入

[install]    
install-option=--prefix=~/.local

相当于每次在执行

# pip install package 命令的时候在 install 后面加 --prefix 参数指定 install 的路径  
pip install --prefix=~/.local package

Tips:
python import 查找python package的流程
我的理解 TODO
参考资料 python import 机制

  • pip 参数

另一种实现是直接在pip install的时候加一个 --user, 当然这个也可以写到pip.conf配置文件中去

pip install --user package

PYTHON 虚拟环境设置

因为在实际工作中经常会遇到创建PYTHON虚拟环境的需求,每次都得去Google,很不方便,这里特意整理一下PYTHON虚拟环境创建的相关资料。

目录:

  • 虚拟环境有什么好处

  • 常见的创建虚拟环境的工具
    • virtualenv
    • Anaconda
  • 虚拟环境配置的一些小trick

虚拟环境 Cons

有时候我们可能手上会有多个python 项目,每个项目使用不同版本的python(python2.7 python3.5 etc.),并且每个python对应于不同的包依赖,还有一种情况是我们可能没有root权限,或者多人共用一个服务器,我们想自己创建一个独立于其他用户的python环境。

这个时候python虚拟环境机制就显得很有用了,python虚拟环境主要有以下好处:

  1. 能够创建一个独立的python环境,和其他用户的设置都不冲突
  2. 能够为每一个项目单独维护一个环境,适应不同的需求

常见的创建虚拟环境的工具

virtualenv

virtualenv is a tool to create isolated Python environments.

virtualenv 主要解决了以下三个问题:

  1. 不同的项目需要同一个python package的不同版本,无法在/usr/lib/python/site-packages文件夹下面同时维护两个不同版本(eg. tensorflow 1.0 and tensorflow 1.5)
  2. 需要为某个项目永久(或者长时间)保留一个运行环境,(保持本机的主环境长时间不变动不现实,无意识的更新或者其他项目需要更新)
  3. 在服务器的使用中,普通用户没有权限访问/usr/lib/python/site-packages文件夹,无法修改主机python环境

virtualenv 原理的一个说明:

virtualenv是如何创建“独立”的Python运行环境的呢?

原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。

安装virtualenv

virtualenv 的安装方式很多,可以通过pip安装,也可以直接从git上下载,通过源码安装,还可以用easy_install安装。

这里只介绍使用pip安装的方法

  • 安装到全局

    [sudo] pip install virtualenv
  • 安装到当前用户
    shell export PYTHONUSERBASE=$HOME pip install --user virtualenv
    virtualenv 的简单使用

virtualenv 主要几个指令是

  • 创建env

    virtualenv env_name --python=python3.x  
    # virtualenv 会在当前文件夹下创建一个名为env_name的文件夹作为虚拟环境env_name的目录,并且将python3.x作为新创建环境的python解释器
  • 进入env

    # 想要使用env,需要先active当前环境,命令为:
    source env_path/bin/activate    #Tips: 可以在~/.bash_aliases文件中设定一个alias,方便直接进入env
  • 使用完env以后,可以通过deactivate退出当前env

  • 如果要删除某个env,只需要 rm -r env_dir,删除对应的文件夹就可以了

还有一些virtualenv的扩展包,进一步集成了virtualenv的功能:virtualenvwrapper (能够在一个文件夹下统一管理所有的env)

  • 其他几个小trick
    • virtualenv 默认不包含全局安装的python 包
    • 可以在env里面通过pip freeze > requirements.txt 来获取当前环境所有的python package的信息。这样在下一次创建环境的时候就可以通过pip install -r requirements.txt直接快速安装所有依赖包

Anaconda

Anaconda is the most popular python data science platform. (Introduced by the Anaconda website)

Anaconda Python 是专注于数据分析的Python发行版本,包含了conda、python等190多个科学包及其依赖项。

Anaconda分离python环境的原理和virtualenv基本一致,都是通过创建一个独立的文件夹保存python环境。Anaconda相较于virtualenv不同的地方主要有以下几点:

  1. Anaconda是一个综合的python工具,包括python基础解释器,IPython,CPython,JupiterBook和一个Python IDE Spyder(Spyder是一个拥有和Matlab相似的界面的Python IDE)
  2. Anaconda配置python环境的时候只需要指定python版本,而不需要本机提前安装(这相较于virtualenv是一个很大的优势)
  3. Anaconda基于Conda来管理python包和环境。
Anaconda 常用指令
# 创建新环境
conda create -n env_name python=X.X #创建名为env_name,解释器为pythonx.x的python虚拟环境
# env_name文件可以在Anaconda安装目录envs文件下找到。# 进入python环境
# Linux 
source activate env_name
# Windows
activate env_name# 进入python环境以后的一些命令
conda list # 查看当前环境安装了那些包
conda env list 
conda info -e
# 查看当前存在那些虚拟环境
conda install package # 安装第三方python包
# 也可以直接使用pip命令安装
pip install package# 删除环境中的某个包
conda remove package
pip uninstall package# 退出当前虚拟环境
source deactivate # Linux
deactivate # Windows# 删除虚拟环境
conda remove -n env_name

转载于:https://www.cnblogs.com/yeyuan111/p/10083499.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

好程序员技术教程分享JavaScript运动框架

好程序员技术教程分享JavaScript运动框架,有需要的朋友可以参考下。 JavaScript的运动,即让某元素的某些属性由一个值变到另一个值的过程。如让div的width属性由200px变到400px,opacity属性由0.3变到1.0,就是一个运动过程。 实现运…

linux 下mysql等php的安装 lnmp

访问https://lnmp.org/install.html按照步骤安装 当下载执行完 wget -c http://soft.vpser.net/lnmp/lnmp1.3.tar.gz && tar zxf lnmp1.3.tar.gz && cd lnmp1.3 && ./install.shlnmp 要到.install.sh下改一下下载地址,把http直接更换成…

单纯形法

单纯形法 如果目标函数中所有系数都非正,那么显然这些变量直接取0是最优的,所以此时答案为即为常数项。 我们要做的就是通过转化把目标函数的系数全部搞成非负。 思路就是用非基变量替换基变量。 先找到一个目标函数中系数为正的变量,在所有限…

洛谷P1828 香甜的黄油 Sweet Butter

香甜的黄油 Sweet Butter 黄油真的是这么做的吗?!!![惶恐] 这道题是Dijkstra算法的简单变形 通过题意我们要找到一个点使奶牛所在点的路程和最短。通过Dijkstra的模板我们可以求的一点到其他任一点的最短路径,那么我们…

JAVA List集合转Page(分页对象)

/*** version 1.0* author: fwjia*/ import java.util.List;public class PageModel<T> {/**** 当前页*/private int page 1;/**** 总页数*/public int totalPages 0;/**** 每页数据条数*/private int pageRecorders;/**** 总页数*/private int totalRows 0;/**** 每页…

分区分表实验用的语句

--查看索引 select * from DBA_IND_PARTITIONS &#xff54;; select status,t.* from dba_indexes t where t.OWNERGANSUSC; select count(*) from ACT_HI_VARINST SELECT ALTER INDEX || TABLE_OWNER || . || INDEX_NAME || UNUSABLE; UNUSABLE_INDEX FROM ALL_INDEX…

分布式数据库数据一致性的原理、与技术实现方案

http://youzhixueyuan.com/the-principle-and-technology-realization-of-distributed-data-consistency.html 背景 可用性&#xff08;Availability&#xff09;和一致性&#xff08;Consistency&#xff09;是分布式系统的基本问题&#xff0c;先有著名的CAP理论定义过分布式…

模块之re模块 —— 正则

#‘match’只匹配从左向右第一个值是否在中括号的范围内&#xff0c;如果没有就返回None 如果有就直接打印一个对象&#xff0c;加上.group()就可以返回你要找的区间里面的值&#xff0c;如果没有找到对应的值&#xff0c;加上‘.group()’会报错 #‘search’ 默认是从整个st…

centos7 docker

Docker 是一个开源工具&#xff0c;它可以让创建和管理 Linux 容器变得简单。容器就像是轻量级的虚拟机&#xff0c;并且可以以毫秒级的速度来启动或停止。Docker 帮助系统管理员和程序员在容器中开发应用程序&#xff0c;并且可以扩展到成千上万的节点。 容器和 VM&#xff08…

批处理ping指定ip列表

for /f in (filename) do (command) for /f %i in (C:\ip.txt) do (ping %i -n 1 && echo %i 通 >>IP.txt || echo %i 不通 >>IP1.txt) 有返回写入ip.txt 没有写入ip1.txt转载于:https://blog.51cto.com/2216859/2384188

Intellij Idea 2017创建web项目及tomcat部署实战

相关软件&#xff1a;Intellij Idea2017、jdk16、tomcat7 Intellij Idea直接安装&#xff08;可根据需要选择自己设置的安装目录&#xff09;&#xff0c;jdk使用1.6/1.7/1.8都可以&#xff0c;主要是配置好系统环境变量&#xff0c;tomcat7上tomcat的官网下载压缩包解压即可。…

docker ssh

1&#xff0c;首先&#xff0c;需要从Docker官网获得centos或Ubuntu镜像 2&#xff0c;当本地已有Ubuntu镜像后&#xff08;大概200M左右大小&#xff09;&#xff0c;使用如下命令 [cpp]view plaincopy docker run -t -i ubuntu /bin/bash 即可启动一个容器&#xff0c;并放…

[BFS]JZOJ 4672 Graph Coloring

Description 现在你有一张无向图包含n个节点m条边。最初&#xff0c;每一条边都是蓝色或者红色。每一次你可以将一个节点连接的所有边变色&#xff08;从红变蓝&#xff0c;蓝变红&#xff09;。找到一种步数最小的方案&#xff0c;使得所有边的颜色相同。Input 第一行包含两个…

实现继承的方式

/*** 借助构造函数实现继承*/function Parent1(){this.name "parent1";}Parent1.prototype.say function(){};function Child1(){//将父构造函数的this指向子构造函数的实例上Parent1.call(this);//applythis.type "child1";}console.log(new Child1);/…

Vue源码: 关于vm.$watch()内部原理

vm.$watch()用法 关于vm.$watch()详细用法可以见官网。 大致用法如下: <script>const app new Vue({el: "#app",data: {a: {b: {c: c}}},mounted () {this.$watch(function () {return this.a.b.c}, this.handle, {deep: true,immediate: true // 默认会初始化…

docker启动顺序

VMDocker: 用户名:root 密码:XXXXXXXXXXXXX docker run -i -t -d -p 8081:8080 -p 23:22 67591570dd29 /bin/bash 常用命令 启动停止: service docker start service docker stop 所有镜像:docker images 当前执行:docker ps 提交保存docker容器: docker commit 进入到对应服…

js时钟倒计时

JS倒计时Date 代码如下&#xff1a; 1 <style type"text/css">2 * {3 margin: 0;4 padding: 0;5 }6 7 #box {8 border: 1px solid cyan;9 background-color: #000; 10 height: 50px; 11 width: 500px; 12 margin: 100px auto 0; 13 border-radius: 20px; 14 te…

JAVA的值传递问题

为什么 Java 中只有值传递&#xff1f; 首先回顾一下在程序设计语言中有关将参数传递给方法&#xff08;或函数&#xff09;的一些专业术语。按值调用(call by value)表示方法接收的是调用者提供的值&#xff0c;而按引用调用&#xff08;call by reference)表示方法接收的是调…

小程序如何封装自定义组件(Toast)

1、创建和pages 同级的component目录新建一个myToast目录 例如: 2、myToast.wxml文件内容: <!-- 自定义toast组件 --> <!-- name 模块名称 --><template name"toast" ><!-- catchtouchmove‘xxx’ 遮罩层的滚动穿透 --><!-- isHide 显示…