Anacondaの仮想環境起動めんどくさい
初心者向け記事です。
今までWindowsではインストールするだけで簡単だったのでAnaconda使ってたのですが、重すぎでした。
Windows PCが先日お亡くなり😇になったタイミングでPipenvで環境構築するようにしました。
Pipenvにするといいこと
雑に特徴を説明。
- Anacondaより軽い。すぐ起動する
- ダウンロード用のpipと環境という意味のenvくっついてPipenv。つまりライブラリの管理と仮想環境構築できるってこと
- ファイル渡せば他の人、PCでもすぐ環境作れる
- スクリプト便利に使える
Pythonをダウンロード
安定版のstableをDLしておくといいと思います。
記事書いたときにはver 3.9出てますが、3.8入れます。
新しいの入れると動かないライブラリとかあるので、新しければいいというわけではない。
Add Python バージョン Path ってところにチェック入れておくと便利
一応これ押しておく。
windowsボタンの横の検索窓のところに
cmd
って入れるとあの黒い画面出るのでpython
と入力してPython 3.8.7
みたいなのがでればOK。exit()
で抜けて、pip
と入力したら
Usage:
pip <command> [options]
みたいなのがダーと出てきたらOK
一応Update
pipを最新にしときます。管理者として実行しないとエラーになるはずなので
先ほどと同じようにcmd
と打って出てきた表示を
右クリック→管理者として実行
をしてください
C:\WINDOWS\system32> pip install --upgrade pip
あとはいらないので閉じてください。
そして、また普通のコマンドプロンプト開く。
※ 最初に開いたコマンドプロンプト開きっぱなしの人は閉じてもう一度起動させる。
pipenv インストール
Pipenvをインストールします
pip install pipenv
インストール終わったら、
pip env
と入力して
Usage: pipenv [OPTIONS] COMMAND [ARGS]...
Options:
みたいなのがいっぱいでたらOK
1. 簡単に使い方説明
Django(WEBアプリのフレームワーク)で初期画面表示させるまでテストとしてやってみます。
プロジェクト保存するフォルダ(今回はdjango)作ってそのフォルダ内でshift押しながら右クリックしてpowershellで起動すると楽に開けます。
pipenv --python 3
こうすればすでに入っている私の場合はpython 3.8で仮想環境が作れます。
pipfileがつくられて、構成が記述されてます。
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
[dev-packages]
[requires]
python_version = "3.8"
3.8が入ってますね。
もし、複数のバージョンをすでに入れた場合は
pipenv --python 3.9
みたいに指定することが可能です。
2. インストールする
pipenvで何かを入れるときはpipenv install 〇〇
です
django入れてみます。
pipenv install django
バージョンを指定したい場合
詳細に指定したい場合はこんな感じで。
pipenv install django==2.2.16
リポジトリから取得する場合
pipenv install git+https://github.com/<ユーザ>/<リポジトリ>.git@<リビジョン>#egg=<パッケージ名>
3. 仮想環境に入る
仮想環境に入ります。普段はここからやればOK
pipenv shell
あとは普通に開発できます。仮想環境から抜けるときは、
exit
とりあえず環境構築するだけならここで完了です。
実践: Djangoを試してみる
WEBアプリのフレームワーク使ってテストしてみます。
pipenv shell
した後に
django-admin startproject testapp .
python manage.py runserver
はい、OK
4. Pipfile,Pipfile.lockで、他の人、PCの環境を一瞬で構築
すでに誰かが環境構築していて、gitとかから取得した場合などに使う。
Pipfileから環境構築する場合
これ使うとPipfile.lockが更新されます。
pipenv install
Pipfile.lockから構築
詳細なバージョンなども合わせて環境構築する場合はpipfile.lock使うこともできます。
pipenv sync
5. Scriptで開発を便利に
スクリプト使うことができます。
たとえば、djangoのサーバー起動するのにpython manage.py runserver
とか面倒だし、コマンド覚える必要もあります。
なので
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
django = "*"
[dev-packages]
[scripts]
start = "python manage.py runserver"
test = "python manage.py test"
[requires]
python_version = "3.8"
スクリプトを起動
$ pipenv run start
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January 28, 2021 - 17:57:09
Django version 3.1.5, using settings 'testapp.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
ちゃんとサーバー起動しました。こんな感じで簡単に使えます。
もちろんtestも
$ pipenv run test
System check identified no issues (0 silenced).
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
6. バージョン指定
[packages]
django = "==3.1.7"
[dev-packages]
django = "==3.1.*"
djangorestframework = "==3.*"
django 3.1.7を入れるならdjango = "==3.1.7"
3.1系で最新を入れたいならdjango = "==3.1.*"
のように書く。
指定しないならdjango = "*"
Pipfile.lock
に書いてあるバージョンを入れたい場合は
pipenv sync
を実行。
補足1
開発環境だけでつかうようなものを入れるとき
pipenv install --dev flake8
コードきれい規約の通りキレイにかけてるか見てくれるflake8ですが、本番環境ではいらないのでこんな感じで開発環境のみで使うように入れることも可能。
[dev-packages]
flake8 = "*"
こんな記述が追加されてます。スクリプトに追記してテストしてみます。
[scripts]
start = "python manage.py runserver"
test = "python manage.py test"
lint = "flake8 --show-source ."
$ pipenv run lint
.\testapp\settings.py:89:80: E501 line too long (91 > 79 characters)
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
^
.\testapp\settings.py:92:80: E501 line too long (81 > 79 characters)
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
^
.\testapp\settings.py:95:80: E501 line too long (82 > 79 characters)
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
^
.\testapp\settings.py:98:80: E501 line too long (83 > 79 characters)
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
Django、一行長すぎってひっかかってるぞ。
まあ、こんな感じで使えます。
開発環境のライブラリも入れる場合
pipenv install --dev
とすれば、今回の場合
[dev-packages]
flake8 = "*"
も入ることになります。
同じようにPipfile.lockからの場合
pipenv sync --dev
補足2 Pathについて
詰まるとしたらPathの登録だと思います。PythonとかpipとかうってもうまくいかないのはPathが通っていないからです。
windowsのホームボタンの隣にある検索の「ここに入力して検索」とか書いてあるところにシステム環境変数の編集って入力して環境変数ってボタン押す。
Pathってところ選んで、編集押す。
C:\Users\ここにユーザー名\AppData\Local\Programs\Python\Python38\Scripts\
C:\\Users\ここにユーザー名\AppData\Local\Programs\Python\Python38\
みたいなのがなかったら新規で追加してください。Python38というのはver 3.8系を今回入れたのでPython38 になってます。
3.9系入れたらPython39です。
複数のバージョン入っていた場合上に書いてあるものが実行されます。
補足3 コマンド一覧
今回使ったコマンドと、もしかしたら使うかもしれないコマンド
pipenv install
ディレクトリ内にPipfile Pipfile.lockを作成。
既にある場合はPipfileの記述された環境で仮想環境作成
pipenv install
仮想環境にライブラリをインストール。Pipfileに記述が追加される。
このコマンドで一つ一つ入れるのが面倒ならPipfileに記述してpipenv install
しよう。
version指定と、開発環境のみに入れる指定も可能。
pipenv install [package]
pipenv install django
pipenv install django==2.2.16
pipenv install --dev flake8
pipenv uninstall
仮想環境のライブラリ削除するコマンドで、Pipfileからも削除される。
依存ライブラリは削除されないので注意
pipenv uninstall [package]
pipenv uninstall
仮想環境使うためのコマンド。毎回作業開始はこれ。
pipenv shell
pipenv run
仮想環境でコマンドを実行する。
pipenv run [コマンド]
その他たまに使うかもしれないコマンド
pipenv update
# pipfileに書いたライブラリをアップデート
pipenv update --dev
# 開発環境で使うライブラリならこっち
例えば、
[packages]
django = "==3.1.*"
[dev-packages]
django = "==3.1.*"
djangorestframework = "==3.*"
pipenv update
でdjangoが3.1系で最新あったらアップデート。
pipenv update --dev
でdjangoが3.1系とdjangorestframework 3系で一番新しいものにアップデートできる
pipenv --rm
# 仮想環境を削除
pipenv --venv
# 仮想環境のパスを確認できる