我仍在尝试了解我遇到的这个问题,并且已经阅读了大量有关sudo apt-get install python-XXX
vs的帖子pip install
,并且我了解了它的精髓(apt-get是一个软件包回购,由完全不同的一群人管理,可以通过pip,auto -updates以及其他所有可用的更新(二进制等)。但是,有些特殊的事情我无法理解,也无法找到答案:
如果出于任何原因,如果我首先使用来安装软件包,例如numpy,sudo apt-get install numpy
然后再进行安装pip install numpy
。怎么了?是否在其他地方使用不同版本(例如,.local / lib)中再次安装了numpy ,所以现在我有两个独立的版本?导入时使用哪个?(如果我正确理解了它是分开的,并且apt-get是系统范围的,但是我已经看到对此问题的回答相互矛盾,例如,在这里)
我注意到apt-get上的许多软件包与pip相比已经很旧了。例如在编写ipython 2.3.0 vs 4.0.3,numpy 1.10.2 vs 1.10.4,spyder 2.3.5 vs 2.3.8时。它有什么优势,首先sudo apt-get install
后跟一个pip install
?还是那只是愚蠢的?
我注意到我的点数是1.5.6-如果您这样做的话,这是最新的时间点sudo apt-get install python-pip
。而在点子上是8.0.2!我相信这已经给我造成了问题,因为使用该旧版本,您可以一次又一次地安装相同的软件包,并且不会发出警告。而且不知何故,它不能覆盖旧版本。我意识到了这一点,因为我可以继续卸载相同的软件包(例如numpy),并且当我这样做时它仍然始终存在pip show numpy
。奇怪的是,总是显示相同的文件夹(.local /),但版本不同:S因此,我有两个与此相关的问题:
一种。什么是安装pip的最佳方法?我目前倾向于sudo apt-get install python-pip
,pip install pip
,sudo apt-get purge python-pip
。那明智吗?对我来说似乎有点荒谬。
b。现在,我知道我的很多软件包都被重复安装弄乱了,可能是因为有些软件包是用apt-get安装的,后来又用pip 1.5.6多次安装了,检查重复和清理的最佳方法是什么?我猜想使用脚本来pip全部卸载并重新安装是不安全的吗?
PS:我不确定是否应该将其发布为新问题还是对原始问题的答复。由于这个问题更加简洁和笼统,我认为将其分开会更好。抱歉,如果我弄错了。
对于档案库,经过反复试验,这是我发现的内容(回想起来,有些地方是有道理的,其他一些地方却很令人困惑)。
如果您使用sudo apt-get install python-xyz
该软件包,则该软件包将显示在中pip list
。当然,您可以在python中导入它,但它不会出现在pip.get_installed_distributions()中。(显然相反是不正确的。即,如果您这样做pip install xyz
,它将不会出现在您的apt /突触中)
之后,sudo apt-get install python-xyz
如果执行此操作pip install xyz
,则取决于您拥有的点子的版本。
OLD v1.5.6(Ubuntu PPA上的当前版本):
此版本的pip(1.5.6)只会在其他位置安装xyz的新副本。您最终将获得多份副本,这会造成巨大的混乱。例如:
如果我pip install numpy
再次执行此操作,它将再次下载并安装。因此,您最终可能会遇到许多无法真正访问的不同版本。我可以做pip install numpy
5倍,然后我就可以做pip uninstall numpy 5x
!显然,您可以注意不要这样做,但是有时其他软件的安装脚本会有些粗心,并且可能使事情变得混乱。令人难以置信的是,Ubuntu正式发布了该版本的pip。
新v8.0.2(pip本身的当前版本):
较新版本的pip(例如,位于pip上的8.0.2)将拒绝安装相同的软件包,说明已满足要求。因此,您无法安装新版本。这是很好的行为(有关稍后获得此版本的pip的更多信息)。
在这种情况下,您只能升级,即使用-U标志进行安装。
但是,当您尝试pip install -U xyz
使用sudo apt-get安装的软件包时,会得到权限错误,因为apt-get安装在/ usr /中,并且需要root访问权限才能在其中写入。
因此AFAIK您别无选择sudo pip install -U xyz
,只能进行更新。在这种情况下,pip将最新的软件包安装到sudo apt-get编写它的位置。例如在我的情况下/usr/local/lib/python2.7/dist-packages。很好
还需要指出的是,apt上的软件包通常比pip上的软件包要旧得多(例如numpy v1.8.2与1.10.4,scipy 0.14.1与0.17.0,ipython 2.3与4.0.3,spyder 2.3.5与2.3.8)
所以我目前的想法是,以获得与大事情sudo apt-get
,例如sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy pytho
正鼻涕的Spyder
然后使用更新它们(或至少其中一些)sudo pip install -U
。
注意:从点子中获取新点子似乎非常重要(非常中继)
sudo apt-get install python-pip
sudo pip install -U pip
PS:我知道virtualenv,但现在不需要它了。我只需要一个开发环境。
这是一个小脚本,用于转储软件包,版本和路径的列表(但仅适用于pip安装的模块,不适用于apt-get的模块)
import pip
pp = pip.get_installed_distributions()
for p in sorted([p.location+"\t"+p.project_name+" ("+p.version+")" for p in pp]):
print p
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句