0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CentOS7にPython3仮想環境(venv)をセットアップする

Posted at

ポイント

CentOS 7のPython 3.6において、ensurepipの問題で仮想環境(venv)がうまく入りませんでした。
仮想環境作成時に --without-pip オプションを付けてまず仮想環境を作成し、続いてpipをインストールすることで無事に作成できました。

通常の手順でやってみる(失敗する)

$ mkdir virtual
$ python3 -mvenv virtual
Error: Command '['/home/user/virtual/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.

私の環境が悪いのか、ensurepip周りでエラーが発生して仮想環境が構築されません。
ensurepipだけを読み込んでみるとsetuptoolsがないぞと言われます。

$ /home/user/virtual/bin/python3 -Im ensurepip
Traceback (most recent call last):
  File "/usr/lib64/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/lib64/python3.6/ensurepip/__main__.py", line 5, in <module>
    sys.exit(ensurepip._main())
  File "/usr/lib64/python3.6/ensurepip/__init__.py", line 232, in _main
    default_pip=args.default_pip,
  File "/usr/lib64/python3.6/ensurepip/__init__.py", line 129, in _bootstrap
    shutil.copy(whl, tmpdir)
  File "/usr/lib64/python3.6/shutil.py", line 245, in copy
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "/usr/lib64/python3.6/shutil.py", line 120, in copyfile
    with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib64/python3.6/ensurepip/_bundled/setuptools-40.6.2-py2.py3-none-any.whl'

ensurepipに_bundled/setuptoolsのバージョンがハードコードされてるからそれを書き換えたらうまくいくよ!という記事があったのですが、そもそも /usr/lib64/python3.6/ensurepip/_bundled ディレクトリが存在していない…。

仕方がないので、 pip を入れずに構築し、その後で pip をインストールするという作戦を試みました。

pipを後からインストール

$ mkdir virtual
$ python3 -mvenv virtual --without-pip
$ . virtual/bin/activate
(virtual)$ curl -sSL https://bootstrap.pypa.io/get-pip.py -o get-pip.py
(virtual)$ python3 get-pip.py

これで無事にインストールできました。

おまけ

普段からきっちりvenvしてなかった私が悪いのですが、.localにいろいろパッケージが入ってしまっていて、それが悪さをして困ったことが起こります。特にGoogle APIはなかなかのツワモノで、.localと干渉してインストールできない、できても動かない、という感じでハマります。

私の環境ではvenvをactivateしてもうまくいかないケース(もう環境がぐちゃぐちゃなのかも)がありましたが、その場合はactivateして、さらに仮想環境のpip3を指定することで無事に動きました。

$ . virtual/bin/activate
(virtual)$ ./virtual/bin/pip3 install google-api-python-client google-auth-oauthlib
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?