2016-02-09 88 views
5

我一個Ubuntu 14系統上安裝Python 2.7包和所遇到的問題,其中,「PIP凍結」產生這樣的輸出...如何從pip freeze異常中恢復?

$ pip freeze 
Exception: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main 
    status = self.run(options, args) 
    File "/usr/lib/python2.7/dist-packages/pip/commands/freeze.py", line 74, in run 
    req = pip.FrozenRequirement.from_dist(dist, dependency_links, find_tags=find_tags) 
    File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 286, in from_dist 
    assert len(specs) == 1 and specs[0][0] == '==' 
AssertionError 

Storing debug log for failure in /home/ubuntu/.pip/pip.log 


$ cat /home/ubuntu/.pip/pip.log 
------------------------------------------------------------ 
/usr/bin/pip run on Tue Feb 9 21:00:36 2016 
Exception: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main 
    status = self.run(options, args) 
    File "/usr/lib/python2.7/dist-packages/pip/commands/freeze.py", line 74, in run 
    req = pip.FrozenRequirement.from_dist(dist, dependency_links, find_tags=find_tags) 
    File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 286, in from_dist 
    assert len(specs) == 1 and specs[0][0] == '==' 
AssertionError 

我不清楚是什麼原因導致這種狀況。
我的懷疑是,easy_install程序的失敗可能導致某些內容被破壞。

我試過重新安裝pip。
這沒有效果。

我懷疑我將不得不通過apt-get通過pip和python相關的ubuntu包完成所有python包的卸載和重新安裝。按包裝打包。

這將是非常耗時,我不確定它是否會達到預期的結果。

有沒有更好的方法來解決這個問題?

這裏是我的easy_install運行之前安裝的軟件包:

sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev protobuf-compiler gfortran libjpeg62 libfreeimage-dev libatlas-base-dev git python-dev python-pip libgoogle-glog-dev libbz2-dev libxml2-dev libxslt-dev libffi-dev libssl-dev libgflags-dev liblmdb-dev python-yaml python-numpy 

這裏是最初的例外,我從easy_install的有:

$ sudo easy_install pillow 
Searching for pillow 
Reading https://pypi.python.org/simple/pillow/ 
Best match: Pillow 3.1.1 
Downloading https://pypi.python.org/packages/source/P/Pillow/Pillow-3.1.1.zip#md5=3868f54fd164e65f95fbcb32f62940ae 
Processing Pillow-3.1.1.zip 
Writing /tmp/easy_install-Bvu_2f/Pillow-3.1.1/setup.cfg 
Running Pillow-3.1.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-Bvu_2f/Pillow-3.1.1/egg-dist-tmp-lMm5Tk 
warning: no previously-included files found matching '.editorconfig' 
Building using 4 processes 
_imaging.c: In function ‘getink’: 
_imaging.c:474:9: warning: ‘r’ may be used uninitialized in this function [-Wmaybe-uninitialized] 
    int r, g, b, a; 
     ^
libImaging/Resample.c:87:45: warning: always_inline function might not be inlinable [-Wattributes] 
static float __attribute__((always_inline)) i2f(int v) { 
              ^
Building using 4 processes 
Building using 4 processes 
Building using 4 processes 
-------------------------------------------------------------------- 
PIL SETUP SUMMARY 
-------------------------------------------------------------------- 
version  Pillow 3.1.1 
platform  linux2 2.7.6 (default, Jun 22 2015, 17:58:13) 
      [GCC 4.8.2] 
-------------------------------------------------------------------- 
*** TKINTER support not available 
--- JPEG support available 
*** OPENJPEG (JPEG2000) support not available 
--- ZLIB (PNG/ZIP) support available 
--- LIBTIFF support available 
--- FREETYPE2 support available 
*** LITTLECMS2 support not available 
*** WEBP support not available 
*** WEBPMUX support not available 
-------------------------------------------------------------------- 
To add a missing option, make sure you have the required 
library, and set the corresponding ROOT variable in the 
setup.py script. 

To check the build, run the selftest.py script. 

Adding Pillow 3.1.1 to easy-install.pth file 
Installing pildriver.py script to /usr/local/bin 
Installing viewer.py script to /usr/local/bin 
Installing gifmaker.py script to /usr/local/bin 
Installing pilconvert.py script to /usr/local/bin 
Installing pilfont.py script to /usr/local/bin 
Installing pilfile.py script to /usr/local/bin 
Installing createfontdatachunk.py script to /usr/local/bin 
Installing explode.py script to /usr/local/bin 
Installing pilprint.py script to /usr/local/bin 
Installing player.py script to /usr/local/bin 
Installing thresholder.py script to /usr/local/bin 
Installing painter.py script to /usr/local/bin 
Installing enhancer.py script to /usr/local/bin 

Installed /usr/local/lib/python2.7/dist-packages/Pillow-3.1.1-py2.7-linux-x86_64.egg 
Processing dependencies for pillow 
Finished processing dependencies for pillow 
Exception in thread Thread-1: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner 
    self.run() 
    File "/usr/lib/python2.7/threading.py", line 763, in run 
    self.__target(*self.__args, **self.__kwargs) 
    File "/usr/lib/python2.7/multiprocessing/pool.py", line 330, in _handle_workers 
    debug('worker handler exiting') 
TypeError: 'NoneType' object is not callable 

Exception Exception in thread Thread-2: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner 
    self.run() 
    File "/usr/lib/python2.7/threading.py", line 763, in run 
    self.__target(*self.__args, **self.__kwargs) 
    File "/usr/lib/python2.7/multiprocessing/pool.py", line 357, in _handle_tasks 
    debug('task handler got sentinel') 
TypeError: 'NoneType' object is not callable 

TypeError: TypeError("'NoneType' object does not support item deletion",) in <Finalize object, dead> ignored 
[email protected]:~/nvidia_installers/cuda$ 

我後來能夠通過PIP安裝枕頭。

我注意到在我的路徑中似乎有2個不同的dist-packages。
這似乎有點奇怪。

>>> import sys 
>>> import pprint 
>>> pp = pprint.PrettyPrinter(indent=4) 
>>> pp.pprint(sys.path) 
[ '', 
    '/usr/lib/python2.7', 
    '/usr/lib/python2.7/plat-x86_64-linux-gnu', 
    '/usr/lib/python2.7/lib-tk', 
    '/usr/lib/python2.7/lib-old', 
    '/usr/lib/python2.7/lib-dynload', 
    '/usr/local/lib/python2.7/dist-packages', 
    '/usr/lib/python2.7/dist-packages'] 

這裏是我下面的全過程:
Install Caffe on EC2 from scratch

我明白,apt-get的支持畫中畫的版本已經很老了。
我試過更新點子。
我得到「由OS擁有」錯誤。
我不確定如何在這裏使用apt-get和這樣做的後果發生分歧。

$ pip install -U pip 
Downloading/unpacking pip from https://pypi.python.org/packages/py2.py3/p/pip/pip-8.0.2-py2.py3-none-any.whl#md5=2056f553d5b593d3a970296f229c1b79 
    Downloading pip-8.0.2-py2.py3-none-any.whl (1.2MB): 1.2MB downloaded 
Installing collected packages: pip 
    Found existing installation: pip 1.5.4 
    Not uninstalling pip at /usr/lib/python2.7/dist-packages, owned by OS 
    Can't roll back pip; was not uninstalled 
Cleaning up... 
Exception: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main 
    status = self.run(options, args) 
    File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 283, in run 
    requirement_set.install(install_options, global_options, root=options.root_path) 
    File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1436, in install 
    requirement.install(install_options, global_options, *args, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/pip/req.py", line 672, in install 
    self.move_wheel_files(self.source_dir, root=root) 
    File "/usr/lib/python2.7/dist-packages/pip/req.py", line 902, in move_wheel_files 
    pycompile=self.pycompile, 
    File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 206, in move_wheel_files 
    clobber(source, lib_dir, True) 
    File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 193, in clobber 
    os.makedirs(destsubdir) 
    File "/usr/lib/python2.7/os.py", line 157, in makedirs 
    mkdir(name, mode) 
OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/pip-8.0.2.dist-info' 

Storing debug log for failure in /home/ubuntu/.pip/pip.log 

$ sudo pip install -U pip 
Downloading/unpacking pip from https://pypi.python.org/packages/py2.py3/p/pip/pip-8.0.2-py2.py3-none-any.whl#md5=2056f553d5b593d3a970296f229c1b79 
    Downloading pip-8.0.2-py2.py3-none-any.whl (1.2MB): 1.2MB downloaded 
Installing collected packages: pip 
    Found existing installation: pip 1.5.4 
    Not uninstalling pip at /usr/lib/python2.7/dist-packages, owned by OS 
Successfully installed pip 
Cleaning up... 

$ pip --version 
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7) 
[email protected]:~$ pip freeze 
Exception: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main 
    status = self.run(options, args) 
    File "/usr/lib/python2.7/dist-packages/pip/commands/freeze.py", line 74, in run 
    req = pip.FrozenRequirement.from_dist(dist, dependency_links, find_tags=find_tags) 
    File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 286, in from_dist 
    assert len(specs) == 1 and specs[0][0] == '==' 
AssertionError 

Storing debug log for failure in /home/ubuntu/.pip/pip.log 

升級點子也沒有的另一種方法:

$ sudo pip install --upgrade pip 
The directory '/home/ubuntu/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. 
The directory '/home/ubuntu/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. 
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:315: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning. 
    SNIMissingWarning 
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:120: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. 
    InsecurePlatformWarning 
Requirement already up-to-date: pip in /usr/local/lib/python2.7/dist-packages 
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:120: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. 
    InsecurePlatformWarning 

$ pip freeze 
Exception: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main 
    status = self.run(options, args) 
    File "/usr/lib/python2.7/dist-packages/pip/commands/freeze.py", line 74, in run 
    req = pip.FrozenRequirement.from_dist(dist, dependency_links, find_tags=find_tags) 
    File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 286, in from_dist 
    assert len(specs) == 1 and specs[0][0] == '==' 
AssertionError 

Storing debug log for failure in /home/ubuntu/.pip/pip.log 

$ ls -lF /home/ubuntu/.cache/pip/http 
ls: cannot access /home/ubuntu/.cache/pip/http: No such file or directory 
$ ls -lF /home/ubuntu/.cache 
total 0 
-rw-r--r-- 1 ubuntu ubuntu 0 Feb 6 00:39 motd.legal-displayed 
+0

你看過它提到的日誌文件嗎? – scrappedcola

+0

是的。它完全複製了打印到屏幕上的信息。沒有額外的信息。 –

+0

你有沒有更新點或檢查出這裏的任何解決方案:http://stackoverflow.com/questions/27711184/why-is-pip-raising-an-assertionerror-on-pip-freeze – scrappedcola

回答

5

要安裝在基於Debian的Linux發行版(包括Ubuntu)點子,我已經使用的easy_install,從python-setuptools包都有不錯的效果。因此,通常看起來像:

sudo apt-get install python-setuptools 
sudo easy_install pip 

它看起來像你已經有easy_install可用。無論如何,在嘗試以這種方式安裝pip之前,您應該嘗試儘可能多地清理當前的設置。我將刪除python-pip包,刪除任何其他升級點的痕跡,並刪除枕頭模塊的痕跡,因爲這是您在事情開始出錯時安裝的東西。也許是這樣的:

sudo apt-get remove --purge python-pip 
sudo rm -rf /usr/local/lib/python2.7/{dist,site}-packages/pip* 
sudo rm -rf /usr/local/lib/python2.7/{dist,site}-packages/pillow* 

最後,當您使用的easy_install或PIP安裝的東西,其中包括除了進口,能夠Python模塊的命令,該命令將被放置在/usr/local/bin,所以你應該確保/usr/local/bin在你的shell中PATHpip命令將在那裏。 (我只使用easy_install來安裝pip,然後使用pip來安裝任何其他python軟件包。)

編輯:順便說一下,「easy_install枕頭的初始異常」不是一個例外,也不是一個錯誤。它顯示了一些非致命的編譯器警告,並且某些功能未啓用,但似乎已經起作用。這可能是後來的點子行爲,這導致了點子的問題。

很久以後編輯2:我有一個「布蘭諾」,並寫了/usr/local/lib我的意思是/usr/local/bin在上面的最後一段。現在修復。

+0

工作得很好。謝謝 –