概要
Vagrant上のCentOS7で、virtualenvをインストールしてPython3の仮想環境をつくった手順の記録。
pip
でvirtualenvwrapper
をインストールするsudo
でインストールすると警告が出てグローバルにインストールされる
許可がなくインストールできない
pip3
でvirtualenvwrapper
をインストールしようとしたところ、許可がないとエラーになった。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$ pip3 install virtualenvwrapper Collecting virtualenvwrapper Downloading https://files.pythonhosted.org/packages/c1/6b/2f05d73b2d2f2410b48b90d3783a0034c26afa534a4a95ad5f1178d61191/virtualenvwrapper-4.8.4.tar.gz (334kB) 100% |████████████████████████████████| 337kB 450kB/s Collecting virtualenv (from virtualenvwrapper) Downloading https://files.pythonhosted.org/packages/56/a2/3e5fdac9ecca6a3a6d2f63f7a486afd4a72728ba9f2ae83fa43f7af8ac8b/virtualenv-20.13.2-py2.py3-none-any.whl (8.7MB) 100% |████████████████████████████████| 8.7MB 178kB/s ........ Exception: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/pip/basecommand.py", line 215, in main status = self.run(options, args) File "/usr/lib/python3.6/site-packages/pip/commands/install.py", line 365, in run strip_file_prefix=options.strip_file_prefix, ........ File "/usr/lib64/python3.6/os.py", line 210, in makedirs makedirs(head, mode, exist_ok) File "/usr/lib64/python3.6/os.py", line 220, in makedirs mkdir(name, mode) PermissionError: [Errno 13] 許可がありません: '/usr/local/lib/python3.6' |
ディレクトリーに書き込み権限がない。
1 2 3 4 5 |
[vagrant@localhost python]$ ls -al /usr/local/lib/ 合計 0 drwxr-xr-x. 3 root root 23 3月 4 17:48 . drwxr-xr-x. 12 root root 131 5月 13 2020 .. drwxr-xr-x. 3 root root 27 3月 4 17:48 python3.6 |
sudoで警告が出るがインストール
以下のような警告が出るが、インストールは実行される。
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install –user` instead.
グローバルインストールするのに対して、--user
オプションでユーザーディレクトリーへのインストールを促している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ sudo pip3 install virtualenvwrapper WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead. Collecting virtualenvwrapper Downloading https://files.pythonhosted.org/packages/c1/6b/2f05d73b2d2f2410b48b90d3783a0034c26afa534a4a95ad5f1178d61191/virtualenvwrapper-4.8.4.tar.gz (334kB) 100% |████████████████████████████████| 337kB 157kB/s Collecting virtualenv (from virtualenvwrapper) Downloading https://files.pythonhosted.org/packages/56/a2/3e5fdac9ecca6a3a6d2f63f7a486afd4a72728ba9f2ae83fa43f7af8ac8b/virtualenv-20.13.2-py2.py3-none-any.whl (8.7MB) 100% |████████████████████████████████| 8.7MB 183kB/s ........ Installing collected packages: platformdirs, typing-extensions, zipp, importlib-metadata, filelock, six, distlib, importlib-resources, virtualenv, virtualenv-clone, pbr, stevedore, virtualenvwrapper Running setup.py install for virtualenvwrapper ... done Successfully installed distlib-0.3.4 filelock-3.4.1 importlib-metadata-4.8.3 importlib-resources-5.4.0 pbr-5.8.1 platformdirs-2.4.0 six-1.16.0 stevedore-3.5.0 typing-extensions-4.1.1 virtualenv-20.13.2 virtualenv-clone-0.5.7 virtualenvwrapper-4.8.4 zipp-3.6.0 |
確認
virtualenv
のバージョン確認。
1 2 |
$ virtualenv --version virtualenv 20.13.2 from /usr/local/lib/python3.6/site-packages/virtualenv/__init__.py |
仮想環境構築の確認。
1 2 3 4 5 6 |
$ virtualenv testpython created virtual environment CPython3.6.8.final.0-64 in 1421ms creator CPython3Posix(dest=/home/vagrant/test/python/testpython, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/vagrant/.local/share/virtualenv) added seed packages: pip==21.3.1, setuptools==59.6.0, wheel==0.37.1 activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator |
ディレクトリー確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ ls -al 合計 0 drwxrwxr-x. 3 vagrant vagrant 24 3月 4 17:50 . drwxrwxr-x. 5 vagrant vagrant 93 3月 4 17:49 .. drwxrwxr-x. 5 vagrant vagrant 77 3月 4 17:50 testpython $ ls -al testpython 合計 12 drwxrwxr-x. 5 vagrant vagrant 77 3月 4 17:50 . drwxrwxr-x. 3 vagrant vagrant 24 3月 4 17:50 .. -rw-rw-r--. 1 vagrant vagrant 40 3月 4 17:50 .gitignore drwxrwxr-x. 2 vagrant vagrant 4096 3月 4 17:50 bin drwxrwxr-x. 3 vagrant vagrant 23 3月 4 17:50 lib drwxrwxr-x. 3 vagrant vagrant 23 3月 4 17:50 lib64 -rw-rw-r--. 1 vagrant vagrant 202 3月 4 17:50 pyvenv.cfg |
仮想環境の有効化。
1 2 3 4 |
$ cd testpython/ $ source bin/activate (testpython) $ which python3 ~/test/python/testpython/bin/python3 |
仮想環境の無効化と削除。
1 2 3 4 |
(test) $ deactivate [vagrant@localhost test]$ which python3 /usr/bin/python3 $ rm -rf test |
操作
基本操作
ディレクトリーを作成して仮想環境を作成。絶対パスでなければ現在のディレクトリー下に作成される。
$ virtualenv directory
仮想環境の有効化。
$ source directory/bin/activate
または
$ . directory/bin/activate
仮想環境の無効化。
(directory) $ deactivate
仮想環境の削除
$ rm -rf directory
応用
Pythonのバージョン指定
$ virtualenv -p python3.6 directory
システムのPythonパッケージ群を仮想環境からも参照
$ virtualenv --system-site-packages directory
virtualenvwrapperの利用
.bashrcの編集と再読み込み
virtualenv
だけでも基本的な操作はできるが、virtualenvwrapper
を利用すると便利なコマンドが使えるようになる。そのために~/.bashrc
に以下の3行を加える。
1 2 3 |
export WORKON_HOME=~/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh |
.bashrc
を実行して反映させる。
1 |
$ source .bashrc |
1行目のWORKON_HOME
で指定したディレクトリーが作成され、ここに仮想環境ごとのディレクトリーが作成される。
2行目を設定しないと以下のエラーが出る。エラーが出てもvirtualenvwrapper
は利用できたが入れておく。
1 2 3 4 5 6 7 |
/usr/bin/python: No module named virtualenvwrapper virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenvwrapper has been installed for VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is set properly. |
3行目はvirtualenvwrapper.sh
を実行させる。
.bashrcの実行後、~/.virtualenvs
ディレクトリーと必要なファイルが作成される。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ ls -Al .virtualenvs/ 合計 48 -rwxr-xr-x. 1 vagrant vagrant 135 3月 5 10:29 get_env_details -rw-r--r--. 1 vagrant vagrant 96 3月 5 10:29 initialize -rw-r--r--. 1 vagrant vagrant 73 3月 5 10:29 postactivate -rw-r--r--. 1 vagrant vagrant 75 3月 5 10:29 postdeactivate -rwxr-xr-x. 1 vagrant vagrant 66 3月 5 10:29 postmkproject -rw-r--r--. 1 vagrant vagrant 73 3月 5 10:29 postmkvirtualenv -rwxr-xr-x. 1 vagrant vagrant 110 3月 5 10:29 postrmvirtualenv -rwxr-xr-x. 1 vagrant vagrant 99 3月 5 10:29 preactivate -rw-r--r--. 1 vagrant vagrant 76 3月 5 10:29 predeactivate -rwxr-xr-x. 1 vagrant vagrant 91 3月 5 10:29 premkproject -rwxr-xr-x. 1 vagrant vagrant 130 3月 5 10:29 premkvirtualenv -rwxr-xr-x. 1 vagrant vagrant 111 3月 5 10:29 prermvirtualenv |
確認
仮想環境を作ってみる。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ mkvirtualenv env1 created virtual environment CPython3.6.8.final.0-64 in 224ms creator CPython3Posix(dest=/home/vagrant/.virtualenvs/env1, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/vagrant/.local/share/virtualenv) added seed packages: pip==21.3.1, setuptools==59.6.0, wheel==0.37.1 activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/env1/bin/predeactivate virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/env1/bin/postdeactivate virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/env1/bin/preactivate virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/env1/bin/postactivate virtualenvwrapper.user_scripts creating /home/vagrant/.virtualenvs/env1/bin/get_env_details (env1) $ |
python3の場所が仮想環境内になっていて、元のシステムの場所とは違う。
1 2 3 4 5 |
(env1) $ which python3 ~/.virtualenvs/env1/bin/python3 (env1) $ deactivate $ which python3 /usr/bin/python3 |
もう一つ仮想環境を作って、workon
コマンドで見てみる。lsvirtualenv
コマンドもあるが、workon
コマンドとの違いがよくわからない。
1 2 3 4 5 6 |
$ mkvirtualenv env2 ........ (env2) $ deactivate $ workon env1 env2 |
仮想環境にモジュールをインストールしてもシステムに影響がないことを確認する。まずシステムにはNumpyモジュールがインストールされていないことを確認。
1 2 3 4 5 6 7 8 |
$ python3 Python 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import numpy as np Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'numpy' |
仮想環境でもNumpyはインストールされていない。
1 2 3 4 5 6 7 8 9 |
$ workon env1 (env1) $ python3 Python 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import numpy as np Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'numpy' |
Python3をexit()
で抜けて、仮想環境のコマンドラインでNumpyをインストール。
1 2 3 4 5 6 |
(env1) $ pip3 install numpy Collecting numpy Downloading numpy-1.19.5-cp36-cp36m-manylinux2010_x86_64.whl (14.8 MB) |████████████████████████████████| 14.8 MB 14.8 MB/s Installing collected packages: numpy Successfully installed numpy-1.19.5 |
Python3でNumpyが使えるようになった。
1 2 3 4 5 6 7 |
(env1) $ python3 Python 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import numpy as np >>> np.array([1, 2, 3]) array([1, 2, 3]) |
Python3をexit()
で抜けて、仮想環境からも抜ける。元の環境ではNumpyはインストールされていないことがわかる。
1 2 3 4 5 6 7 8 9 |
(env1) $ deactivate $ python3 Python 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import numpy as np Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'numpy' |
virtualenvwrapperのコマンド
仮想環境の作成・有効化。WORKON_HOME
で設定したディレクトリーに作成される。
$ mkvirtualenv envname
仮想環境の無効化。
(envname) $ deactivate
仮想環境の一覧。
$ workon
または
$ lsvirtyalenv -b/-l
仮想環境の有効化。
$ workon envname
仮想環境ディレクトリーへの移動。
$ cdvirtualenv envname
仮想環境の削除。
$ rmvirtualenvname envname