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 · 4791 次点击
    这是一个创建于 4530 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不知道這個標題能不能正確表達我的意思。具體的情況是如下這樣的:
    我的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   ·   实用小工具   ·   1003 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:35 · PVG 05:35 · LAX 13:35 · JFK 16:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.