[Ubuntu 12.04] pip upgrade Develop Tip

우분투에 디폴트 설치된 파이썬은 2.7.3 입니다.

언급한 바와 같이 easy_install을 설치하면 pip 버전이 최신 것이 설치됩니다.

하지만 

$ sudo apt-get install python-pip

로 설치한 모듈은 1.0 버전이 설치됩니다.
이렇게 설치한 모듈은 pip의 명령 중에 show 혹은 list 등의 명령이 없다고 나옵니다.

이런 경우 업그레이드를 하는 방법입니다.

$ sudo pip install --upgrade pip
이 명령으로 자신의 모듈을 업그레이드 하라고 시킵니다.

그런데 그 다음 pip list 명령을 돌리면
오류가 발생 하더군요.

다음 명령으로 해결해 줍니다.

$ sudo ln -s /usr/local/bin/pip /usr/bin/pip

이렇게 하고 나서 

$ pip list
apt-xapian-index (0.44)
argparse (1.2.1)
chardet (2.0.1)
Warning: cannot find svn location for distribute==0.6.24dev-r0
distribute (0.6.24dev-r0)
pip (1.4.1)
python-apt (0.8.3ubuntu7.1)
python-debian (0.1.21ubuntu1)
Exception:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 134, in main
    status = self.run(options, args)
  File "/usr/local/lib/python2.7/dist-packages/pip/commands/list.py", line 80, in run
    self.run_listing(options)
  File "/usr/local/lib/python2.7/dist-packages/pip/commands/list.py", line 127, in run_listing
    self.output_package_listing(installed_packages)
  File "/usr/local/lib/python2.7/dist-packages/pip/commands/list.py", line 136, in output_package_listing
    if dist_is_editable(dist):
  File "/usr/local/lib/python2.7/dist-packages/pip/util.py", line 347, in dist_is_editable
    req = FrozenRequirement.from_dist(dist, [])
  File "/usr/local/lib/python2.7/dist-packages/pip/__init__.py", line 194, in from_dist
    assert len(specs) == 1 and specs[0][0] == '=='
AssertionError

와 같은 오류가 발생하면,

$ sudo pip install -U distribute

명령을 한번 더 실행시킵니다.

그러면 pip의 list 및 show와 같은 명령이 잘 수행됩니다.

$ pip list
apt-xapian-index (0.44)
argparse (1.2.1)
chardet (2.0.1)
distribute (0.7.3)
pip (1.4.1)
python-apt (0.8.3ubuntu7.1)
python-debian (0.1.21ubuntu1)
setuptools (1.3.2)
wsgiref (0.1.2)


위에 것을 한번에 정리하면...

sudo apt-get install python-pip
sudo pip install --upgrade pip
sudo ln -s /usr/local/bin/pip /usr/bin/pip

최근에는 위와 같이 하고,

$ pip search dialog
Exception:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 223, in main
    status = self.run(options, args)
  File "/usr/local/lib/python2.7/dist-packages/pip/commands/search.py", line 43, in run
    pypi_hits = self.search(query, options)
  File "/usr/local/lib/python2.7/dist-packages/pip/commands/search.py", line 60, in search
    hits = pypi.search({'name': query, 'summary': query}, 'or')
  File "/usr/lib/python2.7/xmlrpclib.py", line 1224, in __call__
    return self.__send(self.__name, args)
  File "/usr/lib/python2.7/xmlrpclib.py", line 1578, in __request
    verbose=self.__verbose
  File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 785, in request
    headers=headers, stream=True)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/sessions.py", line 508, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 373, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/cachecontrol/adapter.py", line 46, in send
    resp = super(CacheControlAdapter, self).send(request, **kw)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/adapters.py", line 370, in send
    timeout=timeout
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 544, in urlopen
    body=body, headers=headers)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 341, in _make_request
    self._validate_conn(conn)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 761, in _validate_conn
    conn.connect()
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/connection.py", line 238, in connect
    ssl_version=resolved_ssl_version)
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.py", line 279, in ssl_wrap_socket
    cnx.set_tlsext_host_name(server_hostname)
AttributeError: '_socketobject' object has no attribute 'set_tlsext_host_name'


와 같이 오류가 발생하기도하는데, 
이런 경우에는 aptitude로 설치된 python-openssl 패키지가 오래되어서 발생하는 것이었습니다.

이 경우에는,

$ sudo apt-get purge python-openssl
로 해당 패키지를 지운다음,

$ sudo apt-get install python-dev libffi-dev
(파이썬 개발용 헤더와 라이브러리가 없는 경우)

$ sudo pip install pyOpenSSL
이 명령으로 최신의 파이썬용 OpenSSL wrapper로 갱신합니다.

$ pip list | grep -i openssl
Warning: cannot find svn location for distribute===0.6.24dev-r0
pyOpenSSL (0.15.1)

이 상태에서는 위와 같은 오류가 발생하지 않았습니다.


이번에는 위와 같이 Warning: cannot find svn location for distribute===0.6.24dev-r0 이 발생하면,

$ sudo pip install --upgrade distribute
로 해결하면 됩니다.


어느분께는 도움이 되셨기를...



핑백

  • 지훈현서 : [Cython] 싸이썬, 파이썬에 속도를 더하다 2013-12-04 11:12:05 #

    ... Python-like 한 것이 C와 관련이 있나보다...싶네요. 암튼 설치부터 간단 테스트 까지 진행해 보았습니다. 설치는 최신 버전의 pip가 있다면, (우분투12.04에서는 다음 참조) 한줄로 설치 가능합니다. $ sudo pip install cython 위와 같이 설치되고,


구글애드텍스트