V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
NxnXgpuPSfsIT
V2EX  ›  Python

Windows 下 Python2 与 Python3 共存的环境配置

  •  
  •   NxnXgpuPSfsIT ·
    littlecodersh · 2016-06-01 21:42:19 +08:00 · 9190 次点击
    这是一个创建于 3095 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Python 中 Python 2 与 Python 3 的关系一直很让人头疼,本文主要讲述如何在 Windows 系统中配置两个版本共存的环境。

    随着越来越多的人使用 Python 3 ,很多程序都在考虑移植到 Python 3 ,一个共存的环境非常必要。

    而另一方面,许多程序目前却也仅有 Python 2 的版本,让安装 Python 3 的用户使用非常不方便,日常使用也需要一个共存的环境。

    虽然官方给出了py.exe的解决方案,但具体的配置可能还需要一定的普及与指导。

    希望本文能够一定程度上减少 Python 的版本问题给你带来的困扰。

    流程介绍

    • 安装两个版本的 Python
    • 修改注册表、环境变量
    • pip 及命令行第三方包的使用

    安装两个版本的 Python

    简单而言,你可以在任意位置安装这两个版本的 Python 。

    但是出于寻找的便利以及写教程的方便,这里还是给出一个个人较为喜欢的安装位置。

    C:\
        Python\
            Launcher\
                py.exe
            Python27\
                python.exe
            Python35\
                python.exe
    

    Launcher即 Python35 在安装时会询问的是否安装的启动器。

    修改注册表、环境变量

    如果你本身 Python27 、 Python35 的位置就是如上面文件树所述,那么可以跳过本节。

    如果你修改了 Python27 的位置,那么你需要在启动regedit(使用 Win + R 启动),修改注册表:

    • 找到HKEY_CURRENT_USERHKEY_LOCAL_MACHINE下的\SOFTWARE\Python\PythonCore\version\PythonPath
    • 将其中的所有内容修改为对应的新位置,如果只有一个键,那么只修改一个键

    如果你修改了 Python35 的位置,那么最简单的方法就是卸载重新装在新的位置。

    之后我们需要将py.exe所在的目录加入环境变量,使我们可以在命令行使用py命令。

    • 按照常规的方式修改用户的Path变量,不知道怎么修改的可以看这里:Win7 Win8
    • C:\Python\Launcher加入环境变量

    到此你已经可以正常的使用两个版本的 Python 了。

    # 使用默认版本的 Python
    py
    # 使用 Python 27
    py -2
    # 使用 Python 35
    py -3
    

    你也可以通过在文件头部指定 Python 版本:

    #! python3
    

    pip 及命令行第三方包的使用

    有通过增加环境变量或者使用批处理文件使用pip的方法,但都会有一些问题,这里推荐直接使用如下命令:

    py -m pip install itchat
    # 指定特定版本的 pip
    py -3 -m pip install itchat
    

    做好上述配置以后会发现第三方包的命令行工具不能用了,这是因为我们需要做两件事情:

    • C:\Python\Python27\ScriptsC:\Python\Python35\Scripts加入Path环境变量
    • 重装第三方包的命令工具

    这样的情况下如果两个版本都有同名的命令行工具会优先使用 Python27 的命令行工具。

    • 如果需要更改默认,将C:\Python\Python35\Scripts放在前即可
    • 或者直接使用直接路径

    结语

    如果有什么问题或者建议,欢迎评论或者与我邮件联系。

    LittleCoder

    160528

    第 1 条附言  ·  2016-06-02 12:55:58 +08:00
    ActivePython , Anaconda , Canopy , WinPython , virtualenv ,甚至改 python.exe 名字都是可用的解决方案。

    本教程推荐的方法主要优点有:
    1. 支持第三方命令行工具
    2. 不需要额外的软件安装配置
    3. 支持 Shebang Lines
    4. 官方支持

    欢迎就你使用的环境给出优点。教程只是给你一种新的可能的解决方案,理解不了的请右上角红叉。
    45 条回复    2016-09-26 19:47:06 +08:00
    ruoyu0088
        1
    ruoyu0088  
       2016-06-01 22:29:44 +08:00   ❤️ 2
    我都是用 winpython 或者 anaconda ,便携式开发环境,想装多少就装多少。我的电脑上一共由 python 2/3, 32bit/64it, winpython/anaconda ,共 8 个环境。
    NxnXgpuPSfsIT
        2
    NxnXgpuPSfsIT  
    OP
       2016-06-01 23:28:00 +08:00
    @ruoyu0088 哈哈,可以。能分享一下这样配的话第三方命令行工具要怎么设置吗?
    dishonest
        3
    dishonest  
       2016-06-01 23:37:48 +08:00
    Anaconda +1
    @NxnXgpuPSfsIT 命令行指定 python 版本可以用实际 python 路径来执行
    pynix
        4
    pynix  
       2016-06-02 00:19:50 +08:00   ❤️ 1
    There should be one-- and preferably only one --obvious way to do it, but your give me two imcompatable version.
    joshz
        5
    joshz  
       2016-06-02 00:21:01 +08:00 via Android
    感觉 conda 越来越强大了, activate 挺好用,一键切换命令行 Python 环境。
    lxy
        6
    lxy  
       2016-06-02 00:29:22 +08:00
    我记得没这么复杂吧,直接先装 py2 ,再装 py3 ,就自动配置好了。从没修改过注册表。
    ruoyu0088
        7
    ruoyu0088  
       2016-06-02 05:23:33 +08:00   ❤️ 1
    anaconda 有 activate.bat , winpython 有 env.bat 。我用 conemu ,设置多个启动选项,分别启动不同的命令行环境。还为每个环境配置好启动 IPython kernel 的设置,这样无论启动哪个环境中的 Jupyter notebook ,都可以使用所有的环境作为运算核。
    xiamx
        8
    xiamx  
       2016-06-02 06:22:08 +08:00   ❤️ 1
    why can't you just use anaconda?
    Neveroldmilk
        9
    Neveroldmilk  
       2016-06-02 08:06:22 +08:00
    不要改环境变量就行了,没多大技术含量。
    xiahei
        10
    xiahei  
       2016-06-02 08:27:16 +08:00
    why not Linux ?
    duobei
        11
    duobei  
       2016-06-02 08:40:36 +08:00
    @xiamx 是啊,为毛不使用 conda 呢
    littleshy
        12
    littleshy  
       2016-06-02 09:28:00 +08:00
    把 python3 里的 python.exe 改为 python3.exe ,完事。
    cxyfreedom
        13
    cxyfreedom  
       2016-06-02 09:30:27 +08:00
    直接用 anaconda 就行了,何必这么麻烦
    raptor
        14
    raptor  
       2016-06-02 09:42:18 +08:00
    珍爱生命,远离 windows 。
    反正我在 linux/mac 下用 virtualenv 做 py2/3 共存完全没问题,而且很简单
    NxnXgpuPSfsIT
        15
    NxnXgpuPSfsIT  
    OP
       2016-06-02 11:54:45 +08:00 via Android
    @ruoyu0088 是不是挺麻烦的?就不说哪个好用,起码官方给出的这个解决方案值得一试吧。
    NxnXgpuPSfsIT
        16
    NxnXgpuPSfsIT  
    OP
       2016-06-02 11:58:45 +08:00 via Android
    @dishonest 这也是个方案。我建议可以尝试这个官方给出的使用模式,原因有三。指定的命令很长。在使用一般 module 例如 pip 是可以的,但第三方的命令行工具就无法使用。配置方便,不需要额外的下载。
    NxnXgpuPSfsIT
        17
    NxnXgpuPSfsIT  
    OP
       2016-06-02 12:00:12 +08:00 via Android
    @joshz 是的,我本来想写这个教程的。但后来发现官方竟然给出了一个可用的操作。
    NxnXgpuPSfsIT
        18
    NxnXgpuPSfsIT  
    OP
       2016-06-02 12:02:21 +08:00 via Android
    @lxy 我测试 win10 的时候出了这个问题,以免别人也碰到解决不了,就写上了
    NxnXgpuPSfsIT
        19
    NxnXgpuPSfsIT  
    OP
       2016-06-02 12:04:20 +08:00 via Android
    @xiamx why can't you just use Chinese...
    多了解一种可能的解决方案呀,不想知道右上角红叉。
    NxnXgpuPSfsIT
        20
    NxnXgpuPSfsIT  
    OP
       2016-06-02 12:05:07 +08:00 via Android
    @xiahei linux 用户大家都有基础,没啥教程的必要,就没写。
    NxnXgpuPSfsIT
        21
    NxnXgpuPSfsIT  
    OP
       2016-06-02 12:06:45 +08:00 via Android
    @raptor 对的,配 windows 环境一直很让人头疼
    caixiexin
        22
    caixiexin  
       2016-06-02 12:06:52 +08:00 via Android
    记得 virtualenv win 上也能用不是?
    NxnXgpuPSfsIT
        23
    NxnXgpuPSfsIT  
    OP
       2016-06-02 12:09:38 +08:00 via Android
    @littleshy 我本来想提一下这个方法,只使用 python 和 python3 这两个命令是没问题的,配置非常简单
    fy
        24
    fy  
       2016-06-02 12:14:30 +08:00
    并没有这么麻烦,直接将 py2 的 python.exe 改为 python2.exe 或者将 3 的改为 python3.exe
    pip 也处理一下成为 pip2.exe 和 pip3.exe
    就可以了
    ak47t
        25
    ak47t  
       2016-06-02 12:24:43 +08:00
    改来改去好烦啊 还是 virtualenv 好用 完全不用改 pip 都是单独的 python2 python3 自由切换
    NxnXgpuPSfsIT
        26
    NxnXgpuPSfsIT  
    OP
       2016-06-02 14:05:36 +08:00
    @caixiexin 可以用的, http://www.cnblogs.com/chaosimple/p/4475958.html
    有人写过教程,我在这里就贴链接好了
    如果不需要使用 Shebang ,愿意装 virtualenv 的, virtualenv 是个不错的选择
    xiahei
        27
    xiahei  
       2016-06-02 14:46:10 +08:00
    @NxnXgpuPSfsIT 我想说的是: Windows 下这么麻烦,为什么不换 Linux ?而不是说 Linux 下的教程, hhhhh.😄
    flipped123
        28
    flipped123  
       2016-06-02 17:44:36 +08:00
    xiamx
        29
    xiamx  
       2016-06-02 21:41:42 +08:00
    @NxnXgpuPSfsIT 因为你给出的解决方案麻烦啊。不仅配置时需要改注册表,切换版本时还要每次都改环境变量,完全是在坑用户。你发了贴提出个方案,不就是想让大家 peer review 你嘛,不然留着自己用呗
    NxnXgpuPSfsIT
        30
    NxnXgpuPSfsIT  
    OP
       2016-06-02 23:59:27 +08:00
    @xiamx 哟,不用英文了嘛。
    你所说的 peer review 是指你的回答“ why can't you just use anaconda?”么?真是长见识了。
    另,每次切换版本不需要改环境变量且有三大优点(文中已有),如果你想要和我交流一下 anaconda 和 py.exe 的优劣,请起码试用一下。
    欢迎你给出 anaconda 的教程,以及优势,我一定第一时间给你点赞。
    你比较一下你的回复和一楼的几个回复,希望你可以学习一下什么叫 peer review 。
    还是那句话,旨在提供多一种可能的解决方案,不想知道右上角红叉。
    如果你想要抬杠,那抱歉了,我宁愿不回复,这样的回复对别人毫无帮助。
    xiamx
        31
    xiamx  
       2016-06-03 06:36:00 +08:00
    OP 原帖中提出的是一个 Windows 上安装多个 Python 版本的解决方案。但是文中完全忽略了已有的解决方案——对已有的产品, Winpython , anaconda 等绝口不提,也没说 anaconda 等有什么问题需要用 py.exe 解决。所以我问 why can't you just use anaconda 到底触动到了 @NxnXgpuPSfsIT 哪根神经?
    masterjason
        32
    masterjason  
       2016-06-03 08:22:19 +08:00 via iPhone
    @xiamx 我挺理解的,我小学的时候研究出鸡兔同笼用直接计算怎么做别人告诉我能用方程解我也是一脸我不听我不听我不听我是对的
    NxnXgpuPSfsIT
        33
    NxnXgpuPSfsIT  
    OP
       2016-06-03 08:27:17 +08:00
    @xiamx 哟,不说 peer review 了嘛。
    关于要不要回复你的抬杠和越来越奇怪的观点,真是触动我神经到头痛呢。
    以后好好想一想再把观点拿出来好不好?这次的观点都是些什么啊。
    原来你以为写教程是要分享其他各种解决方案的缺点哦。林子大了呀,真是。
    那我写怎么扩展个人微信号,是不是还要列举 Fiddle 的各种缺点: https://www.v2ex.com/t/280429
    那我写 Evernote API 的教程,是不是还要列举 http 直接抓包的各种缺点: https://www.v2ex.com/t/279339
    我只想知道更好的解决方案,你有,提优点出来。抬杠?右上角红叉。
    写篇文章分享下你的 anaconda 呀,我二话不说给你道歉,承认你是个能给论坛创造有用东西的人。
    另,你把页面划到文末你就能看见我写的:“ ActivePython , Anaconda , Canopy , WinPython , virtualenv ,甚至改 python.exe 名字都是可用的解决方案。”,真是无奈。
    个人建议你点个红叉出去,写篇分享,让我来点赞。当然,只是个人建议。
    NxnXgpuPSfsIT
        34
    NxnXgpuPSfsIT  
    OP
       2016-06-03 08:30:21 +08:00
    @masterjason 就默认方程解好了,所以我在引导他分享一下他方程解的优点和解法呀。
    xiamx
        35
    xiamx  
       2016-06-03 08:59:31 +08:00
    @NxnXgpuPSfsIT 你文末的 APPEND 在我写 why can't you just use anaconda 之前,你自己看时间
    xiamx
        36
    xiamx  
       2016-06-03 09:04:24 +08:00
    @masterjason 所以说嘛,还是楼主开心就好
    NxnXgpuPSfsIT
        37
    NxnXgpuPSfsIT  
    OP
       2016-06-03 09:11:07 +08:00
    @xiamx 哟,不说你的写其他解决方案缺点的教程了嘛。
    那我的 APPEND 是在你所谓“本文绝口不提其他方案”的回复之前还是回复之后呀?
    毫无意义的抓住他人已经修改的问题,是为抬杠。
    我旨在“虽然官方给出了 py.exe 的解决方案,但具体的配置可能还需要一定的普及与指导。”
    发现论坛中对其他解决方案感兴趣就立即加上了其他版本的 APPEND 。
    没预料这点,你说我错了,我认,我道歉,所以我第一时间加了 APPEND 。
    我自认已经尽到了一个资料分享者应尽的义务。
    资料分享者也是人,不是神,他们只能即时修正,不能回到过去。
    还是那句话,我希望你能给出 anaconda 的分享,话放在这里,你写,我就去点赞。
    zonzin
        38
    zonzin  
       2016-06-03 11:27:28 +08:00
    CENTOS6.X 自带 2.6 想升级到 2.7 ?折腾不死你。
    NxnXgpuPSfsIT
        39
    NxnXgpuPSfsIT  
    OP
       2016-06-03 12:08:57 +08:00
    @zonzin 你回错主题了吧,这里是 windows 的 python 配置
    xiamx
        40
    xiamx  
       2016-06-05 11:35:45 +08:00   ❤️ 1
    1. 安装 Anaconda 3
    2. conda create -n python2 python=2.7 anaconda
    3. activate python2
    新手友好,不改注册表

    @NxnXgpuPSfsIT 是不会用 Google 还是看不懂英文,都被人分享过好几年的东西还要再重新发个帖?
    NxnXgpuPSfsIT
        41
    NxnXgpuPSfsIT  
    OP
       2016-06-05 16:02:48 +08:00
    @xiamx 谢谢分享!即使只有三句,是分享,我就还是要给你点个感谢。
    其实我这篇文章也只是个简单的翻译和归纳,方便国内那些语言能力没那么强的新手。
    你是留学生,可能没有体会过看到整页的英文两眼一黑的感觉。
    我之后可能还会做一些这样的分享,这次是官方给出的 py 兼容方案的解读,之后也可能只是个我觉得有用的 pep 。
    虽然估计还是挺愚蠢的,但还是欢迎到时候再来交流。
    另,拿出了东西来比较就不算抬杠了,我也需要为之前的言辞给你道个歉,希望不要介意。
    eternitym31
        42
    eternitym31  
       2016-09-03 13:29:04 +08:00
    @ruoyu0088 你的 winpython 和 anaconda 共存怎么搞的。。都会自动添加环境变量,在 cmd 中 spyder, ipython, python ,到底会打开谁的呢。。
    ruoyu0088
        43
    ruoyu0088  
       2016-09-03 18:50:39 +08:00
    @eternitym31 winpython 有一个 env.bat, anaconda 有一个 activate.bat 。在 cmd 下先运行相应的 bat 激活环境。我用 conemu 设置几个 task 分别启动不同的环境。
    numoone
        44
    numoone  
       2016-09-25 13:34:36 +08:00
    @ruoyu0088 请问你在 conemu 里是如何设置 task 的? 我用 winpython ,在 ConEmu 的 task 里设置 python command prompt.exe 总是会弹出一个单独的 cmd 窗口来,只有手动 attach 才能把窗口整合到 conemu 里去。
    ruoyu0088
        45
    ruoyu0088  
       2016-09-26 19:47:06 +08:00
    @numoone

    使用下面的命令:
    cmd /k C:\WinPython-xxxx\scripts\python.bat -new_console

    如果要启动 IPython 的话,可以创建一个启动 IPython 的 bat 文件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5486 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 03:28 · PVG 11:28 · LAX 19:28 · JFK 22:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.