Python生态圈

Python生态圈

Posted November 26, 2015

版本

  • python2.6(不推荐)
  • python2.7
  • python3.0(强力推荐)

PYTHONPATH变量

PYTHONPATH是一个可以用来增强默认包检索路径的环境变量

Bash

export PYTHONPATH=/path/to/some/directory:/path/to/another/directory:/path/to/yet/another/directory

在某些情况下,你不用覆盖已有的PYTHONPATH,只需要在开头或结尾加上新的路径即可。

Bash

export PYTHONPATH=$PYTHONPATH:/path/to/some/directory    # 追加
export PYTHONPATH=/path/to/some/directory:$PYTHONPATH    # 覆盖

同时在python代码里面也可以使用sys.path.insert来动态添加搜索路径. 无论是通过环境变量PYTHONPATH还是通过sys.path.insert都不建议你这样做. 按照python规范好的路径来开发不然维护性要加大.

第三方包

在Linux系统上,至少有3种安装第三方包的方法。

  • 使用系统本身自带的包管理器(deb, rpm等)
  • 通过社区开发的类似pip, easy_install等多种工具
  • 从源文件安装

三种方法都会安装所需的依赖包, 并处理好依赖程序, 同时遵守python的搜索路径.

如果找到合适的包

非root pip安装权限问题

当没有root权限是不能在系统层面安装python包的, 这时候可以采取虚拟环境的方式或者加入--user参数。

默认python的搜索路径里有宿主目录下的~/.local/lib/python2.7/site-packages目录, --user参数的作用也就是安装到这个路径里面.

Python

>>> import sys
>>> print(sys.path)
['', '/home/monitor/.local/lib/python2.7/site-packages', ...略..]

当然也可以在root环境下安装virtualenv 下节讲

virtualenv 虚拟环境

Python社区中设置开发环境的最受欢迎的方法,是通过virtualenv。Virtualenv是一个用于创建孤立Python环境的工具。那么现在问题来了:为什么我们需要孤立的Python环境?要回答这个问题,请允许我引用virtualenv的官方文档。

我们要解决的问题之一,就是依赖包和版本的管理问题,以及间接地解决权限问题。假设你有一个应用需要使用LibFoo V1,但是另一个应用需要V2。那么你如何使用两个应用呢?如果你把需要的包都安装在/usr/lib/python2.7/site-packages(或是你的系统默认路径),很容易就出现你不小心更新了不应该更新的应用。

简单来说,你的每一个项目都可以拥有一个单独的、孤立的Python环境;你可以把所需的包安装到各自孤立的环境中。

Bash

sudo pip install virtualenv

Bash

$ mkdir my_env
$ cd my_env/
$ virtualenv .
New python executable in ./bin/python
Installing setuptools, pip...done.
$ ls -al
总用量 20
drwxrwxr-x  5 monitor monitor 4096 11月 26 13:56 .
drwx------ 10 monitor monitor 4096 11月 26 13:56 ..
drwxrwxr-x  2 monitor monitor 4096 11月 26 13:56 bin
drwxrwxr-x  2 monitor monitor 4096 11月 26 13:56 include
drwxrwxr-x  3 monitor monitor 4096 11月 26 13:56 lib
lrwxrwxrwx  1 monitor monitor    3 11月 26 13:56 lib64 -> lib

进入虚拟环境

进入环境后终端的提示符, 会有关于所在虚拟环境的标示, 这里我的标示就是my_env

Bash

[[email protected]]$ source bin/activate
(my_env)[[email protected]]$

到了这里, 使用pip安装都会安装到./lib/python2.7/site-packages/里面, 可以看下我们使用的pip命令和python命令位置, 已经完全和系统的python环境分离. 甚至可以看到python的搜索路径.

Bash

(my_env)[[email protected]]$ which pip
~/my_env/bin/pip 
(my_env)[[email protected]]$ which python
~/my_env/bin/python

Python

>>> import sys
>>> sys.path
['', '/home/monitor/my_env/lib64/python27.zip', '/home/monitor/my_env/lib64/python2.7', '/home/monitor/my_env/lib64/python2.7/plat-linux2', '/home/monitor/my_env/lib64/python2.7/lib-tk', '/home/monitor/my_env/lib64/python2.7/lib-old', '/home/monitor/my_env/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7', '/usr/lib/python2.7', '/home/monitor/my_env/lib/python2.7/site-packages']
>>>

退出虚拟环境

如果需要回到系统环境

Bash

(my_env)[[email protected]]$ deactivate
[[email protected]]$

默认虚拟环境里面可以使用系统环境的包

注意:系统Python环境中安装的所有包,默认是可以在虚拟环境中调用的。这意味着,如果你在系统环境中安装了simplejson包,那么所有的虚拟环境将自动获得这个包的地址。你可以在创建虚拟环境时,通过添加--no-site-packages选项,取消这个行为,就像这样:

Bash

[[email protected]]$ virtualenv . --no-site-packages

virtualenvwrapper

virtualenvwrapper是virtualenv 封装后的工具集

安装

Bash

[[email protected]]$ sudo pip install virtualenvwrapper

安装后此工具提供这个bash 方法文件

Text only

virtualenvwrapper                            virtualenvwrapper_setup_tab_completion
virtualenvwrapper_absolutepath               virtualenvwrapper.sh
virtualenvwrapper_cd                         virtualenvwrapper_show_workon_options
virtualenvwrapper_derive_workon_home         virtualenvwrapper_tempfile
virtualenvwrapper_expandpath                 virtualenvwrapper_verify_active_environment
virtualenvwrapper_get_python_version         virtualenvwrapper_verify_project_home
virtualenvwrapper_get_site_packages_dir      virtualenvwrapper_verify_resource
virtualenvwrapper_initialize                 virtualenvwrapper_verify_virtualenv
virtualenvwrapper_lazy.sh                    virtualenvwrapper_verify_virtualenv_clone
virtualenvwrapper_mkproject_help             virtualenvwrapper_verify_workon_environment
virtualenvwrapper_mktemp                     virtualenvwrapper_verify_workon_home
virtualenvwrapper_mkvirtualenv_help          virtualenvwrapper_workon_help
virtualenvwrapper_run_hook

其实需要用到的就一个virtualenvwrapper.sh, 所有封装好的工具都是此bash脚本里面的函数, 所以我们要使用必须要source加载一下,找到它的位置, 加到~/.bashrc 里面每次进入系统自动加载.

Bash

echo -e "\n# 加载虚拟环境工具集\nsource $(which virtualenvwrapper.sh)\n\n" >> ~/.bashrc

这样只要每次登陆系统就可以使用里面的工具集了, 这里说下virtualenvwrapper提供了哪些方法.

Bash

# 创建虚拟环境
mkvirtualenv my_env

# 进入虚拟环境
workon my_env

# 退出虚拟环境
deactivate

# 删除虚拟环境
rmvirtualenv my_env

注意:mkvirtualenv同时支持virtualenv参数, 所以前面讲的--user--no-site-packages参数同时也会支持, 看到这里相信你知道这个工具只是对virtualenv做了封装了吧, 所以最好每次只需要安装virtualenvwrapper就行了, 依赖包virtualenv会自动安装.

通过pip和virtualenv进行基本的依赖包管理

virtualenv虚拟环境的确是开发环境的好东西, 但是不只是仅仅开发环境, 线上部署多应用的时候同样需要多虚拟环境同时存在. 如果我们在虚拟环境开发完了, 可以直接把依赖的包提取出来, 也就是打包的范畴了. Python项目里都存在一个requirements.txt文件, 好像成了标准规范. 幸运的是pip freeze命令支持直接生成.

Bash

(my_env)[[email protected]]$ pip freeze > requirements.txt

编辑器推荐

个人比较倾向vim, 还有支持自动补全的 PyCharm, 你应该选择最合适的编辑器.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 18.04上安装Java

Java和JVM(Java的虚拟机)是许多软件所必需的,包括Tomcat,Jetty,Glassfish,Cassandra和Jenkins。

1.4K2
来自专栏上善若水

013android初级篇之Android Studio 引用源码模块,jar及so文件

013android初级篇之Android Studio 引用源码模块,jar及so文件

1852
来自专栏zhangdd.com

redis官方集群手动故障转移测试

有的时候在主节点没有任何问题的情况下强制手动故障转移也是很有必要的,比如想要升级主节点的Redis进程,我们可以通过故障转移将其转为slave再进行升级操作来避...

1612
来自专栏Java后端技术栈

使用Spring Session和Redis解决分布式Session跨域共享问题

对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash、轮训、根据权重、随机等。不管对于哪一种负载均衡算法,由于Nginx对不同的...

2542
来自专栏小狼的世界

Fedora 11 的安装以及 LAMP环境的搭建(二)

        Windows下的同事,很多都使用winrar来压缩和传输文件,所以这个也是不可或缺的,提供对于rar压缩格式的支持

1073
来自专栏开源优测

python selenium2示例 - 日志管理

前言 在自动化测试实践过程中,必不可少的就是进行日志管理,方便调试和生产问题追踪,python提供了logging模块来进行日志的管理。下面我们就...

3394
来自专栏青玉伏案

JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术

在上篇博客中,我们聊了《JavaEE开发之SpringMVC中的自定义拦截器及异常处理》。本篇博客我们继续的来聊SpringMVC的东西,下方我们将会聊到js、...

2356
来自专栏玄魂工作室

Kali Linux Web渗透测试手册(第二版) - 1.2 - Firefox浏览器下安装一些常用的插件

1.2、为渗透测试配置web浏览器(即在Firefox浏览器下安装一些常用的插件)

2924
来自专栏Jerry的SAP技术分享

使用Eclipse进行PHP的服务器端调试

最近工作需要对PHP的服务器端代码进行远程调试,涉及到Eclipse里环境的设置。在网上找了很多资料,大多不全,或者缺少配图,于是把自己做的过程中遇到的问题记录...

1252
来自专栏向治洪

Android Studio安装插件

Android Studio安装插件的方式其实和Eclipse大同小异。废话不多说,直接上图: ? 区域1:你当前已经安装了的插件 区域2:在线安装 区...

2018

扫码关注云+社区

领取腾讯云代金券