これまで使っていたパッケージが古いバージョンだったので一括でアップデートしようとしたのですが、
pip update
みたいなコマンドがなかったので、エイリアスを作りました。
便利になったかと言われたら微妙です笑
手順
$ pip install --upgrade pip
$ cd ~
$ mkdir .pip_update
$ cd .pip_update
$ sudo pip-chill --no-version > ./pip_list.txt
$ sudo chmod 701 pip_list.txt
$ cd ../
$ sudo chmod 701 .pip_update
$ sudo pip install --upgrade -r ~/.pip_update/pip_list.txt
これでやると、初めはエラーが出ました。
どういうエラーかというと、
Collecting pydelicious (from -r /Users/username/.pip_update/pip_list.txt (line 106))
Downloading pydelicious-0.6.1.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/private/tmp/pip-build-_82vkdci/pydelicious/setup.py", line 11, in <module>
import pydelicious
File "/private/tmp/pip-build-_82vkdci/pydelicious/pydelicious/__init__.py", line 171
raise DeliciousItemExistsError, params['url']
^
SyntaxError: invalid syntax
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/tmp/pip-build-_82vkdci/pydelicious/
このpydeliciousは以前、集合知プログラミングという本で勉強した時に入れたのですが、サポートが終わっているのかうまく行かなかったのを思い出したので、
$ pip uninstall pydelicious
でアンインストールしました。
Uninstalling pydelicious-0.6:
/Users/username/anaconda/bin/dlcs
/Users/username/anaconda/lib/python3.6/site-packages/pydelicious-0.6-py3.6.egg
Proceed (y/n)? y
Successfully uninstalled pydelicious-0.6
Traceback (most recent call last):
File "/Users/username/anaconda/bin/pip", line 6, in <module>
sys.exit(pip.main())
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/__init__.py", line 249, in main
return command.main(cmd_args)
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/basecommand.py", line 252, in main
pip_version_check(session)
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/utils/outdated.py", line 102, in pip_version_check
installed_version = get_installed_version("pip")
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/utils/__init__.py", line 838, in get_installed_version
working_set = pkg_resources.WorkingSet()
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 644, in __init__
self.add_entry(entry)
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 700, in add_entry
for dist in find_distributions(entry, True):
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1949, in find_eggs_in_zip
if metadata.has_metadata('PKG-INFO'):
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1463, in has_metadata
return self.egg_info and self._has(self._fn(self.egg_info, name))
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1823, in _has
return zip_path in self.zipinfo or zip_path in self._index()
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1703, in zipinfo
return self._zip_manifests.load(self.loader.archive)
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1643, in load
mtime = os.stat(path).st_mtime
FileNotFoundError: [Errno 2] No such file or directory: '/Users/username/anaconda/lib/python3.6/site-packages/pydelicious-0.6-py3.6.egg'
というエラーが出ましたが、とりあえず Successfully uninstalled pydelicious
と書かれていたのでよしとして先に進みました。
インストールしたくないパッケージが出てきたので、 pip_list.txt
を書き直します。
$ sudo pip-chill --no-version > ~/.pip_update/pip_list.txt
これで
$ pip install --upgrade -r ~/.pip_update/pip_list.txt
をすると、
Successfully installed Jinja2-2.9.6 MarkupSafe-1.0 PyWavelets-0.5.2 alabaster-0.7.10 alembic-0.9.6 argcomplete-1.9.2 asn1crypto-0.23.0 astroid-1.5.3 astropy-2.0.2 awscli-1.11.178 babel-2.5.1 banal-0.2.1 bcrypt-3.1.4 bleach-2.1.1 bokeh-0.12.10 boto-2.48.0 boto3-1.4.7 botocore-1.7.36 bottleneck-1.2.1 cached-property-1.3.1 cffi-1.11.2 chardet-3.0.4 cloudpickle-0.4.1 contextlib2-0.5.5 cryptography-2.1.2 cython-0.27.2 dataset-1.0.3 decorator-4.1.2 dill-0.2.7.1 docutils-0.14 durationpy-0.5 entrypoints-0.2.3 flask-0.12.2 flask-cors-3.0.3 gevent-1.2.2 greenlet-0.4.12 h5py-2.7.1 hjson-3.0.0 html5lib-1.0b10 idna-2.6 ipykernel-4.6.1 ipython-6.2.1 ipython-genutils-0.2.0 ipywidgets-7.0.3 isodate-0.6.0 isort-4.2.15 jedi-0.11.0 jsonschema-2.6.0 jupyter-client-5.1.0 jupyter-console-5.2.0 jupyter-contrib-nbextensions-0.3.3 jupyter-core-4.3.0 jupyter-highlight-selected-word-0.1.0 jupyter-nbextensions-configurator-0.2.8 jupyterthemes-0.18.2 keras-2.0.8 lazy-object-proxy-1.3.1 llvmlite-0.20.0 lxml-4.1.0 markdown-2.6.9 matplotlib-2.1.0 mccabe-0.6.1 mistune-0.8 mpmath-1.0.0 nbconvert-5.3.1 nbformat-4.4.0 networkx-2.0 nltk-3.2.5 normality-0.5.0 notebook-5.2.0 numba-0.35.0 numexpr-2.6.4 numpy-1.13.3 numpydoc-0.7.0 openpyxl-2.4.9 pandas-0.20.3 pandocfilters-1.4.2 paramiko-2.3.1 parso-0.1.0 partd-0.3.8 pathlib2-2.3.0 pep8-1.7.1 pillow-4.3.0 ply-3.10 prompt-toolkit-1.0.15 protobuf-3.4.0 psutil-5.4.0 ptyprocess-0.5.2 py-1.4.34 pyasn1-0.3.7 pycparser-2.18 pyflakes-1.6.0 pygments-2.2.0 pylint-1.7.4 pyopenssl-17.3.0 pytest-3.2.3 pytimeparse-1.1.7 qtawesome-0.4.4 qtconsole-4.3.1 qtpy-1.3.1 redis-2.10.6 requests-2.18.4 rope-0.10.7 s3transfer-0.1.11 scikit-image-0.13.1 scikit-learn-0.19.1 scipy-1.0.0 selenium-3.6.0 sphinx-1.6.5 sphinxcontrib-websupport-1.0.1 spyder-3.2.4 sqlalchemy-1.1.14 sqlparse-0.2.4 statsmodels-0.8.0 stevedore-1.27.1 sympy-1.1.1 tables-3.4.2 tensorflow-1.3.0 tensorflow-tensorboard-0.1.8 testpath-0.3.1 tornado-4.5.2 tqdm-4.15.0 traitlets-4.3.2 troposphere-2.0.2 urllib3-1.22 virtualenvwrapper-4.8.2 wheel-0.30.0 widgetsnbextension-3.0.6 wrapt-1.10.11 xlrd-1.1.0 xlsxwriter-1.0.2 xlwings-0.11.4 xlwt-1.3.0 zappa-0.44.3
となり、うまくインストールできたようです。
しかしここでも2種類のエラーが出ており、
①setup.pyを実行している間に以下のようにでる
DEPRECATION: Uninstalling a distutils installed project (cython) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
②pip.main()を実行しようとすると以下のエラーがでる
Traceback (most recent call last):
File "/Users/username/anaconda/bin/pip", line 6, in <module>
sys.exit(pip.main())
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/__init__.py", line 249, in main
return command.main(cmd_args)
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/basecommand.py", line 252, in main
pip_version_check(session)
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/utils/outdated.py", line 102, in pip_version_check
installed_version = get_installed_version("pip")
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/utils/__init__.py", line 838, in get_installed_version
working_set = pkg_resources.WorkingSet()
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 644, in __init__
self.add_entry(entry)
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 700, in add_entry
for dist in find_distributions(entry, True):
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1949, in find_eggs_in_zip
if metadata.has_metadata('PKG-INFO'):
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1463, in has_metadata
return self.egg_info and self._has(self._fn(self.egg_info, name))
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1823, in _has
return zip_path in self.zipinfo or zip_path in self._index()
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1703, in zipinfo
return self._zip_manifests.load(self.loader.archive)
File "/Users/username/anaconda/lib/python3.6/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1643, in load
mtime = os.stat(path).st_mtime
FileNotFoundError: [Errno 2] No such file or directory: '/Users/username/anaconda/lib/python3.6/site-packages/jupyter_highlight_selected_word-0.0.11-py3.6.egg'
これはなんなんだろう...
わかる方いたら教えてください。
エイリアスにする
次回から思い立ったらすぐにアップデートできるように .zshrc
にエイリアスを作成します。
(僕はzshを使っているので、他のシェルを使っている人は .bashrc
とかの設定ファイルに同じように追加してください。)
$ pip-pkg-update() { sudo pip install --upgrade -r ~/.pip_update/pip_list.txt }
これで次から
$ pip-pkg-update
でアップデートできます。
さっきのエラーはなんだったのか。。。バージョン管理って難しいですね。