摘要:在我的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符号链接替换为对新二进制文件的适当引用(我认为安装会这样做)。顺便说一句,我的机器上仍然有python 2.7.3。
即
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工作(运行)IDLEsudo 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中,管理员通过sudo apt-get install python-module
安装与给定的python相关的 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
。当我使用pip安装xlwt
时,创建了一个目录/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的软件包管理器中)。
这里描述:
What's the difference between dist-packages and site-packages?
相关的是此处描述的/usr/lib
和/usr/local/lib
之间的区别:
What's the difference between /usr/local/lib/python2.6 and /usr/lib/python2.6?
新安装的Python 2.7.8没有&#34;看到&#34;目录/usr/lib/python2.7/dist-packages/
,其中包含必要的模块lsb_release
,因为它未设置为通过包管理器(通过apt-get
)查看。由于我手动安装(即使用./configure && make && make install
),因此只能看到/usr/local/lib/python2.7/
。
我删除了这个问题,但也许对其他新手有帮助。管理员请随时删除。