摘要:在我的 Ubuntu 机器上安装了更新的 python 后,一些实用程序无法工作。为什么?
我对 Linux 的唯一经验是 Ubuntu 12.04,到目前为止,我主要依靠 apt-get 来安装软件包(即,对 ./configure && make && sudo make install 的经验很少)。
最新版本的 python 似乎无法通过 apt-get 获得,所以我下载了安装的 python 2.7.8 和你的典型
./configure && make && sudo make install
现在,我对包管理的知识基本上为零,所以考虑到这一点......
无论出于何种原因,我不得不手动将 /usr/bin 中的 python 符号链接替换为对新二进制文件的适当引用(我认为 install 会这样做)。顺便说一句,我的机器上还有 python 2.7.3。
IE
cd /usr/bin
sudo rm python
ln -s /location/of/new/python python
现在,为了准备写一个完全不同的问题,我想确认我的 Ubuntu 版本
lsb_release -a
但我明白了
Traceback (most recent call last):
File "/usr/bin/lsb_release", line 26, in <module>
import lsb_release
ImportError: No module named lsb_release
我感觉这将在许多实用程序中继续发生,直到我可以告诉我的系统以某种方式查看 ubuntu 安装的(apt-get)python 模块。
例如,我安装了 pip 并且可以正常工作,但是现在如果我输入
pip install lsb_release
Traceback (most recent call last):
File "/usr/bin/pip", line 5, in <module>
from pkg_resources import load_entry_point
ImportError: No module named pkg_resources
是否有一种简单(或没有)的方法来解决所有这些依赖问题?
安装 tk-dev 后,我现在可以使用新的 Python 2.7.8 进行 IDLE 工作(运行)
sudo apt-get install tk-dev
(以前没有这一步也可以工作)
但是如果我通过右键单击并转到 IDLE打开一个带有 IDLE 的 python 脚本,它就看不到我的 wxPython (wx) 库,我也是新构建的。我也从终端遇到了这个问题,但根据
当我右键单击 python 文件并转到 IDLE 时,如何获得 IDLE 以查看 wx 模块?如果我从终端运行 IDLE,它可以看到 wx 模块(即import wx
有效)。
我知道这个问题到处都是,但我不知道从哪里开始。
谢谢。
可能相关的其他信息:
which python
/usr/bin/python
python --version
Python 2.7.8
python -m site
sys.path = [
'/usr/lib/python2.7',
'/usr/local/lib/python27.zip',
'/home/jpf/src/Python-2.7.8/Lib',
'/home/jpf/src/Python-2.7.8/Lib/plat-linux2',
'/home/jpf/src/Python-2.7.8/Lib/lib-tk',
'/home/jpf/src/Python-2.7.8/Lib/lib-old',
'/home/jpf/src/Python-2.7.8/build/lib.linux-i686-2.7',
'/home/jpf/.local/lib/python2.7/site-packages',
'/usr/local/lib/python2.7/site-packages',
'/usr/local/lib/python2.7/site-packages/wx-3.0-gtk2',
'/usr/local/lib/python2.7/dist-packages',
'/usr/local/lib/python2.7/dist-packages/wx-2.9.4-gtk2',
]
(这正确地安装了两个版本的 wxPython。)但是这对我来说看起来不一致......
locate lsb_release.py
/usr/lib/python2.7/dist-packages/lsb_release.py
/usr/lib/python2.7/dist-packages/lsb_release.pyc
/usr/lib/python3/dist-packages/lsb_release.py
/usr/share/pyshared/lsb_release.py
python 模块 lsb_release 的位置是/usr/lib/python2.7/dist-packages
python 似乎正在搜索/usr/local/lib/python2.7/dist-packages
. 我做错了什么?
部分回答
开始理解这个问题,正如预期的那样,这是由于我对 Linux 和 Ubuntu 的工作原理一无所知。
在 Ubuntu 中,管理员通过将给定的与 python 相关的python 模块sudo apt-get install python-module
安装在/usr/local/lib/pythonX.Y/dist-packages
. 当管理员通过相同的方法安装 python程序时,它似乎位于/usr/lib/pythonX.Y/dist-packages
. 例如,当我安装 pip 时,我是通过sudo apt-get install python-pip
. 这创建了目录/usr/lib/python2.7/dist-packages/pip
。当我xlwt
使用 pip 安装时,/usr/local/lib/pythonX.Y/dist-packages/xlwt
会创建一个目录。这可能不是一个硬性规定,但似乎至少 python 模块,当与 apt-get 或 pip 一起安装时,都安装在/usr/local/lib/pythonX.Y/dist-packages
.
这与站点包位置/usr/local/lib/pythonX.Y/site-packages
(/usr/lib/pythonX.Y/site-packages
不存在)形成对比,当管理员手动安装包时添加包,就像我在 wxPython 3.0 中所做的那样(见/usr/local/lib/python2.7/site-packages/wx-3.0-gtk2
上文,与/usr/local/lib/python2.7/dist-packages/wx-2.9.4-gtk2
我安装的特殊说明不同以集成到Ubuntu 的包管理器)。
此处对此进行了描述:
dist-packages 和 site-packages 有什么区别?
/usr/lib
相关的是这里描述的和之间的区别/usr/local/lib
:
/usr/local/lib/python2.6 和 /usr/lib/python2.6 有什么区别?
新安装的 Python 2.7.8 没有“看到”/usr/lib/python2.7/dist-packages/
包含必要模块的目录,lsb_release
因为它没有设置为通过包管理器(通过apt-get
)查看它。由于我手动安装它(即使用./configure && make && make install
)它只看到/usr/local/lib/python2.7/
.
我会删除这个问题,但也许它会对其他新手有所帮助。如果合适,请管理员随时删除。