CentOS 7のepelでインストールしたpython3.4でvenvを使うとエラーになる件の回避策
はじめに
CentOS 7のpythonパッケージは2.7.xなので、3系を使うには別途インストールする必要があります。
EPELの python34`` パッケージを使うと ``python3 -m venv venv`` でエラーになるという問題が起きたのですが、
Floating Octothorpe: Python3, CentOS and pip の記事で解決したのでメモです。
IUS Community Repo のPython 3.6.x
AdditionalResources/Repositories - CentOS Wiki の IUS Community Repo なら python36u
というパッケージ名でPython 3.6.xがインストールできます。
IUS Community Project Packages を見ると他に python36u-setuptools
, uwsgi-plugin-python36u
, python36u-pip
, python36u-lxml
, python36u-psycopg2
パッケージが提供されています。
こちらは python3.6 -m venv venv
で問題なくvirtualenv環境が作成できました。
Extra Packages for Enterprise Linux (EPEL)のPython 3.4.x
EPELでも python34
というパッケージ名でPython 3.4.xがインストールできます。 IUS Community Repoの3.6.xよりは古いですが、 python34-*
のパッケージはこちらのほうが多いです(とは言え venv
を使うのであればあまり関係無いとも言えますが)。
また、EPELは他でも使うので私は常に有効にしています。
サードパーティのレポジトリの種類はなるべく限定しておきたいと考えるとIUS Community Repoは使わずにEPELの python34
を使うという選択肢もありえます。
EPELのPython 3.4でvenvを使うとエラー
python3.4 -m venv venv
を実行すると以下のようなエラーが出ました(ここでは /home/admin/blog
というディレクトリで実行しました)。
$ python3.4 -m venv venv
Error: Command '['/home/admin/blog/venv/bin/python3.4', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1
エラーになったコマンドを直接実行すると /usr/lib64/python3.4/ensurepip/_bundled/setuptools-20.10.1-py2.py3-none-any.whl
というファイルが無くてエラーになっていることがわかります。
$ /home/admin/blog/venv/bin/python3.4 -Im ensurepip --upgrade --default-pip
Traceback (most recent call last):
File "/usr/lib64/python3.4/runpy.py", line 170, in _run_module_as_main
"__main__", mod_spec)
File "/usr/lib64/python3.4/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/usr/lib64/python3.4/ensurepip/__main__.py", line 4, in <module>
ensurepip._main()
File "/usr/lib64/python3.4/ensurepip/__init__.py", line 209, in _main
default_pip=args.default_pip,
File "/usr/lib64/python3.4/ensurepip/__init__.py", line 98, in bootstrap
"_bundled/{}".format(wheel_name),
File "/usr/lib64/python3.4/pkgutil.py", line 629, in get_data
return loader.get_data(resource_name)
File "<frozen importlib._bootstrap>", line 1623, in get_data
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib64/python3.4/ensurepip/_bundled/setuptools-20.10.1-py2.py3-none-any.whl'
この問題は Bug 1263057 – pyvenv3.4 doesn’t work without pip に報告されています。
EPELのPython 3.4でvenvを使うための回避策
EPELのインストールからのコマンドをまとめると以下のようになります。
sudo yum install epel-release
sudo yum install python34 python34-setuptools python34-pip
sudo mkdir -p /usr/lib64/python3.4/ensurepip/_bundled
sudo curl -o /usr/lib64/python3.4/ensurepip/_bundled/setuptools-20.10.1-py2.py3-none-any.whl \
https://pypi.python.org/packages/c5/e2/72d706eeda837564b9fecdc8b2bf48b33467ae928ed05d4ac157463c90fb/setuptools-20.10.1-py2.py3-none-any.whl
sudo curl -o /usr/lib64/python3.4/ensurepip/_bundled/pip-8.1.1-py2.py3-none-any.whl \
https://pypi.python.org/packages/31/6a/0f19a7edef6c8e5065f4346137cc2a08e22e141942d66af2e1e72d851462/pip-8.1.1-py2.py3-none-any.whl
Floating Octothorpe: Python3, CentOS and pip に詳しく書かれていますが、
上記の setuptools
と pip
のバージョンは /usr/lib64/python3.4/ensurepip/__init__.py
に書いてあるバージョンに一致させる必要があります。
|
|