系默Python版本更後的依解 - V2EX
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
mckelvin
V2EX    Python

系默Python版本更後的依解

  •  
  •   mckelvin
    mckelvin 2012-06-24 13:48:14 +08:00 5254 次点击
    这是一个创建于 4928 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不知道能不能正表我的意思。具的情是如下的:
    我的PC的操作系是Archlinux,默/usr/bin/python的版本是2.7的。公司的Python境是2.6的,了兼容考我用yaourt(Archlinux下的包管理工具)安装了一个Python2.6

    sudo yaourt -S python26

    并将/usr/bin/python和python2链接到/usr/bin/python2.6

    sudo rm /usr/bin/python
    sudo ln -s /usr/bin/python2.6 /usr/bin/python
    sudo rm /usr/bin/python2
    sudo ln -s /usr/bin/python2.6 /usr/bin/python2

    但是这样之后系统中原本依赖python2.7的程序有些就不能跑了,我想应该是这些程序的依赖python2.7的lib中的某些模块,而python2.6中没有这些模块。比如典型的症状是尝试运行Gnome3下的菜单管理工具alacarte会提示:

    [kelvin@kelvinpc ~]$ alacarte
    Traceback (most recent call last):
    File "/usr/bin/alacarte", line 22, in <module>
    from Alacarte.MainWindow import MainWindow
    ImportError: No module named Alacarte.MainWindow

    上面我的分析思路什吧?的如何正理呢?

    先!
    11 条回复    1970-01-01 08:00:00 +08:00
    ayanamist
        1
    ayanamist  
       2012-06-24 14:48:10 +08:00   1
    干嘛要更换默认的Python版本?
    这就是项目不用virtualenv的悲剧。
    用virtualenv能解决你所有的问题。
    phuslu
        2
    phuslu  
       2012-06-24 15:32:30 +08:00
    pythonbrew
    lwjefSub
        3
    lwjefSub  
       2012-06-24 15:46:28 +08:00
    @ayanamist virtualenv 能切版本的吗 =。= 不是只能隔离库吗
    ayanamist
        4
    ayanamist  
       2012-06-25 13:17:02 +08:00
    @lwjefSub 能在创建env的时候,指定使用哪个Python,甚至可以指定为PyPy。具体请仔细阅读virtualenv的文档。
    csx163
        5
    csx163  
       2012-06-25 13:21:15 +08:00
    取消链接
    把你们公司的文件头部改为这样#!/usr/bin/env python26
    然后安装alacarte模块用 python26 setyp.py install
    mckelvin
        6
    mckelvin  
    OP
       2012-06-25 16:47:49 +08:00
    试了下pythonbrew,貌似比virtualenv更便于多版本切换。用过virtualenv,还是会出现些bug,和pythonbrew一样,两者都是控制current shell里的python版本,公司代码比较庞大,不确定virtualenv能不能保证里面所有依赖都使用指定环境,或者是下面这样的尴尬情况

    [kelvin@kelvinpc ~]$ which python
    /usr/bin/python
    [kelvin@kelvinpc ~]$ which python2
    /usr/bin/python2
    [kelvin@kelvinpc ~]$ pythonbrew switch 2.6.6
    Switched to Python-2.6.6
    [kelvin@kelvinpc ~]$ which python
    /home/kelvin/.pythonbrew/pythons/Python-2.6.6/bin/python
    [kelvin@kelvinpc ~]$ which python2
    /usr/bin/python2

    还因为一个叫pyhash(pip install pyhash)的依赖有些问题,直接开发机上写了,改天再折腾看看。

    LZ小白,欢迎指正。
    road2stat
        7
    road2stat  
       2012-06-25 16:53:58 +08:00
    「所谓的 python 是 python3,而 python2 其实是 python,至于 python-2.6.6,那又是另一个故事了 。。。」
    mckelvin
        8
    mckelvin  
    OP
       2012-06-25 19:26:14 +08:00
    @road2stat 这不会是archlinux独有的方式吧?
    瓣瓣的code头里各种

    #!/usr/bin/env python

    按这样的标准来应该

    #!/usr/bin/env python2

    才是
    bcxx
        9
    bcxx  
       2012-06-25 19:38:18 +08:00
    @mckelvin archlinux python 是 python3
    road2stat
        10
    road2stat  
       2012-06-25 21:33:21 +08:00
    @mckelvin 是的。Arch 中符号 python 是语义上的 python3,而用符号 python2 表示语义上的 python2 。。。其他发行版一般默认版本还是 2.x 吧,语义上的 python2 用符号 python 表示,语义上的 python3 用符号 python3 表示 。。。

    关于 Python 的问题,也可以向 hongqn 大人请教下啊,还可以顺便学学 Gentoo 。。。
    ayanamist
        11
    ayanamist  
       2012-06-26 04:57:50 +08:00
    @mckelvin 麻烦看清楚,pythonbrew的包隔离也是用virtualenv做的……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5627 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 03:33 PVG 11:33 LAX 19:33 JFK 22:33
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86