linux 建议使用3.5以上版本。开发环境使用pyenv,可以管理python解释器、管理python版本、管理python的虚拟环境。可以使多版本共存。pyenv是一个虚拟环境。也有其他的环境可以实现。
pyenv 是 Python 版本管理工具。 pyenv 可以改变全局的 Python 版本,安装多个版本的 Python, 设置目录级别的 Python 版本,还能创建和管理 virtual python environments 。所有的设置都是用户级别的操作,不需要 sudo 命令。
pyenv 主要用来管理 Python 的版本,比如一个项目需要 Python 2.x ,一个项目需要 Python 3.x 。 而 virtualenv 主要用来管理 Python 包的依赖,不同项目需要依赖的包版本不同,则需要使用虚拟环境。
pyenv 通过系统修改环境变量来实现 Python 不同版本的切换。而 virtualenv 通过将 Python 包安装到一个目录来作为 Python 包虚拟环境,通过切换目录来实现不同包环境间的切换。
pyenv 的美好之处在于,它并没有使用将不同的PATH植入不同的shell这种高耦合的工作方式,而是简单地在PATH 的最前面插入了一个垫片路径(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin。所有对 Python 可执行文件的查找都会首先被这个 shims 路径截获,从而使后方的系统路径失效。
测试安装 使用CentOS6.5-64
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 yum install git vim /etc/yum.repos.d/python.repo [updates] name=CentOS-Updates baseurl=https://mirrors.aliyun.com/centos/6.9/os/x86_64 gpgcheck=0 # 加入yum源 yum repolist yum update nss # 更新此包,如果不更新此包,在安装pyenv时可能会报错,提示“curl:(35) SSL connect error” yum install gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel # 这是pyenv在安装python时要用到的包,pyenv是就地编译的,在编译时要用到这些包。 # ubuntu19.04需要安装的包:build-essential python-dev python-setuptools python-pip python-smbus libncurses5-dev libgdbm-dev libc6-dev zlib1g-dev libsqlite3-dev tk-dev libssl-dev openssl libffi-dev useradd python passwd python su - python # 要用此用户登录开发 # pythonoffline.tar.gz是在线连接的时候出现问题,再解压此包进行配置 curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash # 访问安装pyenv,安装好后会输出三行信息,要加入.bash_profile文件中。使用-L参数,curl就会跳转到新的网址。 vim ~/.bash_profile export PATH="/home/python/.pyenv/bin:$PATH" eval "$(pyenv init -)" # 初始化pyenv这个工具,初始化后就可以自动补全了 eval "$(pyenv virtualenv-init -)" # 初始化virtualenv这个插件,因为开发都用虚拟环境 # eval 会对后面的cmdLine进行两遍扫描,如果在第一遍扫面后cmdLine是一个普通命令,则执行此命令;如果cmdLine中含有变量的间接引用,则保证简介引用的语义。source ~/.bash_profile python -V # 查看python版本,显示是2.6.6版本。 # 注意:不要升级系统本身的python版本,因为有软件依赖,升级会使系统混乱,比如yum可能无法使用。所有工作都应该在pyenv这个多版本工具里进行 pyenv # 查看可用到的命令,如install等 pyenv install -l # 列出可用的python版本 pyenv install 3.5.3 -v # 安装python3.5.3版本,并输出详细信息。但连接非常慢。如果提示"No module named '_ctypes'" ,那么需要安装libffi-devel cd ~/.pyenv ll # 这里是python家目录下的.pyenv目录,里面有上面刚安装过的插件 mkdir cache # 在.pyenv目录中创建一个目录,下面准备使用离线安装的方式。 cd cache 将python-3.5.3.tar.xz、python-3.5.3.tgz两个文件放入cache目录中。这两个文件是在安装过程中可能依赖的包,下载地址:https://www.python.org/ftp/python/3.5.3/ cd .. pyenv install 3.5.3 -v # 在cache上一层目录执行安装 python -V # 这时显示还是2.6.6版本 pyenv version # 查看当前的python版本的位置 [python@bogon .pyenv]$ pyenv versions * system (set by /home/python/.pyenv/version) 3.5.3 # 查看由pyenv管理的所有python版本,这里有3.5.3版本,但没有*标记 * global pyenv global 3.5.3 # 改全局使用的python为3.5.3版本 python -V # 查看依然是2.6.6版本 pyenv versions # 这时3.5.3前已经有标记了,表示当前使用版本 python -V # 查看依然是2.6.6版本 pyenv version # 这里显示当前使用版本也是3.5.3 再打开一个新的窗口用python用户登录,执行python -V,这时就是3.5.3版本了。如果用root用户这样操作,影响会非常大 pyenv global system # 调回2.6.6,再次登录就都调回来了。global会影响当前用户。不建议使用global pyenv install 3.6.3 # 安装一个3.6.3版本 # pyenv version是显示当前的python版本;pyenv versions显示所有可用的python版本,和当前版本。 pyenv versions * shell只设定当前的会话级别,如果会话变了,版本的调整也就失效了 pyenv shell 3.5.3 pyenv versions python -v # 使用shell命令设置后,发现版本都有了变化 再打开一个窗口 python -V # 这时显示的是2.6.6版本 pyenv versions # 这里还是system版本 * local mkdir magedu/projects/web # 在python家目录中创建目录 cd magedu/projects/web python -V # 这时显示的是2.6.6版本 pyenv local 3.5.3 python -V # 这时显示的是3.5.3版本 cd .. python -V # 到上一级目录查看版本是2.6.6,也就是版本与目录绑定了,进入特定的目录就会到一个不同的版本中 mkdir /home/python/magedu/profects/web/html # 在web中创建html目录 cd html python -V # 这里也是3.5.3版本,local 的特性是子目录继承的,所以web和html中都会显示3.5.3版本 mkdir projects/cmdb cd projects/cmdb python -V # 这时显示的是2.6.6.版本 pyenv local 3.6.3 python -V # 显示3.6.3版本 # 这里有一个问题,这个版本是大家共用的
虚拟环境 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 cd /home/python/magedu/projects/cmdb pyenv virtualenv 3.5.3 my353 # 给3.5.3版本制作一个虚拟版本,叫my353 pyenv versions # 这时多了一个my353的版本 cd .. mkdir test cd test [python@bogon test]$ pyenv local my353 (my353) [python@bogon test]$ # 这时提示符有了变化,多了一个(my353) cd .. # 到上一级目录就不会有(my353) cd test # 这时就有了(my353),使用python -V命令可以看到这里的Python版本是3.5.3了 cd # 到家目录 cd .pyenv ls cd versions ll # 这里有一个my353的软链接 cd 3.5.3 [python@bogon 3.5.3]$ ls bin envs include lib share # 这里有几个重要的目录,lib目录下有一个python3.5目录,其中有一个site-packages,这个目录有开发中安装的所有的包。如果大家都用3.5.3版本,那么包会全部放到这个目录里 cd ../.. cd versions/3.5.3/envs # 在3.5.3目录下有一个envs目录,在envs中有my353目录,这是my353的虚拟环境,通过pyenv versions也可以看到这个信息。这个目录中也有一个lib目录,lib目录下有python3.5,再下面也有site-packages目录。如果使用虚拟环境,所有包都会装到这里。 cd cd magedu/projects/web python -V # 是3.5.3版本 cd ../test # 进虚拟环境,要安装ipython cd mkdir .pip cd .pip touch pip.conf vim pip.conf [global] index-url=https://mirrors.aliyun.com/pypi/simple/ trusted-host=mirrors.aliyun.com # 这一步主要是为了使用pip的国内镜像 # 在使用 pyenv 之后使用 pip 安装的第三方模块会自动安装到当前使用 python 版本下,不会和系 # 统模块产生冲突。使用 pip 安装模块之后,如果没有生效,记得使用 pyenv rehash 来更新垫片路径。 pip # 提示找不到此命令,因为使用了pyenv管理这个版本,而目前的版本是system,system默认是没有安装pip命令的 cd cd magedu/projects/test pip # 现在是3.5.3版本,这里是有pip命令的 pip install ipython # 在虚拟环境中用pip安装ipython,只有到虚拟环境中才能使用ipython。pip就是python install packge,也就是安装包的缩写,pip是安装的管理器,与yum相似。ipython是一个与python交互的工具 pip install --upgrade pip # 上一步执行完会提示要先升级pip,之后才能安装ipython ipython # 提示没有ipython命令,再登录一下就可以使用了 # ubuntu19.04安装时还是会有提示"No module named '_ctypes'" ,那么需要安装下列包 # sudo apt install build-essential python-dev python-setuptools python-pip python-smbus libncurses5-dev libgdbm-dev libc6-dev zlib1g-dev libsqlite3-dev tk-dev libssl-dev openssl libffi-dev # 这里有一个问题,就是上面这些包要在安装python版本包之前安装,不然就要用pyenv uninstall 3.8.0先卸载安装的版本,再重新安装了。实际是重新编译安装python版本包,不然还会报错 pip install jupyter # 这是一个可视化界面 cd cd .pyenv/versions/3.5.3/envs cd my353/lib/python3.5/site-packages/ ll # 包都装在了这里 cd .pyenv/versions/3.5.3/lib/python3.5/site-packages/ # 这里没有什么东西 cd cd magedu/projects/test jupyter notebook --help jupyter notebook password # 设置密码,如果不设置,会要求输入一长串东西才能使用 jupyter notebook # 启动,但因为没有图形接口,所以会有不能运行的提示 ss -tln # 这时会监听127.0.0.1:8888端口,但不能使用 jupyter notebook --ip=0.0.0.0 --no-browser # 这样启动可以监听所有地址,从外部就可以访问了。--no-browser表示不启动浏览器 浏览器访问IP:8888,密码是上面设置的。如果没有设置密码,要输入启动时出现的一长串字符 cd magedu/projects/test # 进入相应版本的目录,不然不能使用pip pip list # 查看管理的包 pip help pip freeze > requirement # 把当前环境中的pip所安装的文件列表以及版本号全部导入reguiremeot, reguiremeot是自定义的名字 cat requiremeot # 这就是导出包的过程 cd ../web python -V # 3.5.3版本 pip list # 现在包很少 pip install -r ../test/requiremeot # 这样可以保证两个环境安装的包是一样的。另外将一个环境中的site-packages中的包复制到另一个环境的相同目录下也可以实现这个效果 pip list windows安装python是要选择"Add Python 3.6 to PATH"
离线安装 1 2 3 4 5 6 7 8 9 10 git clone https://github.com/pyenv/pyenv.git ~/.pyenv git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv git clone https://github.com/pyenv/pyenv-update.git ~/.pyenv/plugins/pyenv-update git clone https://github.com/pyenv/pyenv-which-ext.git ~/.pyenv/plugins/pyenv-which-ext //可以把克隆的目录打包,方便以后离线使用 vim ~/.bash_profile export PATH="/home/python/.pyenv/bin:$PATH" eval "$(pyenv init -)" //初始化pyenv这个工具 eval "$(pyenv virtualenv-init -)" //初始化virtualenv这个插件,因为开发都用虚拟环境 source ~/.bash_profile
windows