Pythonのバージョン管理をPipenvにした話。Windows10ではPipenvがベストプラクティスな気がする。

どうも、りーずです。

・Windows10でのPythonのバージョン管理はPipenvが良い
・Pipenvを使えるようにする手順
・Pipenvの使い方
・requirements.txtを作成する
・requirements.txtから仮想環境をpipenvで作る
・仮想環境を有効にしようとすると「このシステムではスクリプトの実行が無効になっているため、ファイル ~.venv\Scripts\activate.ps1 を読み込むことができません。」と出る場合
・まとめ

このような構成でお届けします。Pipenvは良いよ!というメモです。

pip install pipenv
pipenv --python 3.7
.venv/Scripts/activate
deactivate
pipenv install django==2.2
django-admin startproject プロジェクト名
django-admin startapp アプリ名
python manage.py runserver
pipenv lock -r > requirements.txt

今回実際に使うのは上記のコマンドです。


・Windows10でのPythonのバージョン管理はPipenvが良い

Windows10環境のPythonのバージョン管理でAnacondaを使ったり、Virtualenvを使ったり、素のPythonでpipを使っていたりしたのですが、最近はPipenvがDjangoなどの開発には向いているのではないかと思うようになりました。その理由を述べていきます。

最初はWindows10でAnacondaを使おうとしたのですが、使いたいライブラリがなかなか動かせなかったり、インストールの設定でどれがベストなのかが分かりにくかったり、pipコマンドと混ぜると良くない(?)などの情報があり、使わなくなりました。
一言でいうと初心者には難しいです。

その後、Udemyや海外のYouTubeのPythonの英語の動画を見ているとよく使われているvirtualenvを使っていました。

しかしvirtualenvはPythonのバージョンを切り替えられないという欠点がありました。
(Python3.6、3.7、3.8などを切り替えられない。)

そこで色々と調べた結果、Pipenvを使うと
・Pythonのバージョンそのものも管理(切り替え)が出来る
・個々のフォルダ内で環境を作り、アクティベートするとそのまま設定したものが使える

というように、やりたいことが出来る唯一のバージョン管理ツールでした。
これには非常に利便性を感じたので、Djangoなどのアプリケーションを作ったり、ちょっとしたプログラミングをするにはPipenvでいいかな、という結論になりました。

僕はAnacondaとの共存は諦め、とりあえずPipenvのみでやっていこうと思いました。

これらのツイートで貼っているリンクが参考にしたものです。


・Pipenvを使えるようにする手順

まず、使いたいPythonは、公式からダウンロードしてインストールしておきます。(重要)

Python3.8を使いたければそれをダウンロードしてインストール、Python3.7を使いたければそれをダウンロードしてインストール、という感じです。

Pythonのインストール先ですが、

C:\Python
というフォルダを作り、そこに

Python3.6.7の64ビット版は
C:\Python\Python367

Python3.8.5の32ビット版は
C:\Python\Python385-32

という感じに数字を割り振り、分かりやすいように名前をつけてインストールしていくと良いです。
Program Filesフォルダにインストールすると、空白でエラーになるような事があったので、気をつけましょう。

僕は、インストーラーでパスは通してインストールしました。

「パスが通っている/パスを通す」という日本語は、「Windows10のシステム環境変数のPathという変数に、設定がされているという意味です。これをすることにより、ターミナル上で、プログラム名を入れるだけでプログラムを実行することが出来るようになります。「python」というコマンドが動くのも、「パソコン上のどこにあるpython.exeを動かすかが指定されているから」です。)

参考:『「PATH を通す」の意味をできるだけわかりやすく説明する試み』
https://qiita.com/sta/items/63e1048025d1830d12fd

パスを通すと、『環境変数で一番上に来ているPythonのバージョン』がターミナル(コマンドプロンプト)のデフォルトになります。以下のようなイメージ。

3つのPythonをパスを通してインストールしている図。 この場合、実際にターミナル(コマンドプロンプト)で動くのは一番上のPython 3.85の32bit版になる。

もし、Windows10のターミナルコマンドで使いたいデフォルトのPythonのバージョンを変えたい場合は、システム環境変数の設定でそのバージョンを一番上に持ってくればOKです。
2行でセットなので、2行とも上に持っていきましょう。

ちなみに上の図で「使われない」と書かれているPythonも、以下のPipenvによって、仮想環境で使えるようになります。

・Pipenv(バージョン管理ツール)のインストール

さて、次はPipenvを入れなければいけません。

そして、これに限ってはPythonのどれかのバージョンに直接pipコマンドで入れる必要があります。
pipコマンドは
pip install ライブラリ名
で、PythonのライブラリをインストールできるPython公式のコマンドです。
ライブラリの管理に使います。

Pipenv(これもライブラリです)を入れるPythonのバージョンは、インストールしているPythonの最新のバージョンで良いと思います。

Pythonを入れているフォルダには「Scripts」という名前のフォルダがあり、どんなライブラリが入っているかを確認することが出来ます。

僕の場合は
Python3.8.5の32ビット版にPipenvを入れました。

まぁどれに入れても大丈夫だと思います。
現在pythonコマンドのパスが通っているものにしましょう。

では、実際にPipenvを入れてみましょう。まずはどのバージョンのPythonがターミナルで動いているか確認しましょう。

python --version

ここのPythonにPipenvを入れるので、バージョンは一応覚えておきましょう。
そうしたら、ターミナルで

pip install pipenv

と打ち、Pipenvをインストールします。現在パスを通しているPythonのバージョンのScriptsフォルダにインストールされます。

もしうまくインストールされない場合は、Windows Power Shellのアイコンを右クリックして「管理者として実行する」で起動して、そこでコマンドを打ってみて下さい。

管理者権限でWindows Power Shellを起動する画面 。(タスクバーを縦に設定してるのは気にしないでください)

管理者権限でWindows Power Shellを起動する画面 。(タスクバーを縦に設定してるのは気にしないでください)

Cドライブ等にコマンドで変更を加える場合は管理人権限での実行が必要になる場合があるからです。

・システム環境変数を設定する
次に、環境変数の設定です。ここがポイントです。

『プロジェクトのフォルダ直下にPipenvの仮想環境が作られてほしい』ので、
新たに環境変数を設定します。

例えばプロジェクトのフォルダごと消去すれば、仮想環境ごと消せますし、プロジェクトフォルダに入ってターミナルでアクティベートコマンド(.venv/Scripts/activate)を実行するだけで、そのプロジェクトに設定した環境がすぐ立ち上がるようになります。

まずは、Windows10の左下の検索窓に『環境変数』と打ち込み、『システム環境変数の編集』画面を出しましょう。以下のようにして下さい。

Windows10の左下の検索窓に『環境変数』と打ち込む。

そうしたら、出てきた、『システム環境変数の編集』をクリックします。

※「環境変数を編集」をクリックすると「システム環境変数の編集」がグレーアウトするので注意。選ぶのは「システム環境変数の編集」です。

すると「システムのプロパティ」画面が出てきて
「環境変数」とクリックできる画面が出ます。そこで「環境変数」をクリック。

以下のように環境変数を編集する画面が出るはずです。

Windows10の環境変数(『システム環境変数』のほう)に「PIPENV_VENV_IN_PROJECT」という項目を作り、「true」という値を入れます。

以下の画像のようにします。

「システム環境変数」のなかに変数「PIPENV_VENV_IN_PROJECT」を作り、値を「true」にする

「システム環境変数」の「新規」で追加しましょう。

変数:PIPENV_VENV_IN_PROJECT
値:true

これにより、pipenvコマンドを使うとその各フォルダのルート直下に仮想環境が構築出来るようになります。

そうしたらパソコンを再起動しましょう。環境変数を反映させるためです。

・Pipenvの使い方

Pipenvの実際の使い方を説明します。
まず、仮想環境を作りたいフォルダ(プロジェクトフォルダ)を作ります。

そうしたらターミナルでその場所に移動し、そこで

pipenv --python 3.7

のように打ちます。(これは例なのでpython 3.8でも何でも良いです。)

こうするとその場所に仮想環境がPython3.7で構築されます。
(指定する「Python3.7」は手動であらかじめインストールされている必要があります。)

次に、

.venv/Scripts/activate

と打つと、アクティベートされます。

deactivate

で、ディアクティベートされます。

あとは自由に、djangoなどのライブラリを追加でインストールしていきましょう。
インストールする場合は必ず

pipenv install django==2.2

このように「pipenv install」とすることに気をつけましょう。
通常の「pip install」だと、おそらく仮想環境ではなく「今パスの通っているPythonの本体」にインストールされてしまいます。

また、仮想環境を消したい場合は「pipenv install」で作成されたファイルとフォルダを削除するだけでOKです。

.venv
Pipfile
Pipfile.lock

この1つのフォルダ(.venv)と2つのファイル(Pipfile、Pipfile.lock)です。

以上でPipenvの簡単な説明でした。

仮想環境を、Pythonのバージョンを指定して作成出来て、
それぞれのフォルダで仮想環境を作成&立ち上げられることが便利ですね。

使うときにはアクティベートのコマンド(.venv/Scripts/activate)を打つだけなので、どのPythonのバージョンで作ったかを覚えておく必要もありません。

アクティベート後にPythonのバージョンを確認したい場合は

python --version

で確認出来ます。
アクティベート後は普通のpythonコマンドで、その仮想環境のPythonが実行されるようになります。

ちなみに、djangoをインストールしたあとは
django-admin startproject プロジェクト名

のようにしてプロジェクトを作り
その中に入って
django-admin startapp アプリ名
でアプリを作り、
そのあとに
python manage.py runserver

としてから
http://localhost:8000/
(ローカルのサーバー。実行時に3000か8000か表示されるはず)
にアクセスしましょう。

参考:
「PipenvでDjango開発環境をつくる」
https://qiita.com/nochifuchi/items/4fe0164f0d8949cf11b7

・requirements.txtを作成する

requirements.txtを作成するには、
コマンドライン(ターミナル)で、

pipenv lock -r > requirements.txt

を実行します。

参考:「Pipenvことはじめ」
https://qiita.com/shinshin86/items/e11c1124e3e2e74556b8#requirementstxt%E3%81%AB%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%99

・requirements.txtから仮想環境をpipenvで作る

パターン1:Pythonのバージョンを指定したい場合

仮想環境のPythonのバージョンを指定したい場合は

最初に
pipenv --python 3.7(指定したいバージョン)
として、一番最初にPythonのバージョンを指定して仮想環境を作っておきます。
そして
.venv/Scripts/activate
で仮想環境に入り、
そのあとに requirements.txtのあるフォルダで
pipenv install
をします。そうするとそのPythonのバージョンとrequirements.txtの指定で環境が作られます。

パターン2:仮想環境のPythonのバージョンはpipenvのpythonで良い場合

Pythonのバージョンが、pipenvを入れてあるPythonのバージョンで良いのであれば、
requirements.txtから仮想環境をpipenvで作るには、そのディレクトリでそのまま

pipenv install

を実行すれば完了です。

一応「パターン1」のほうで明示的にPythonのバージョンを指定して作ったほうが良いとは思います。

参考:「requirements.txtからのインポート」
https://pipenv-ja.readthedocs.io/ja/translate-ja/basics.html#importing-from-requirements-txt


・仮想環境を有効にしようとすると「このシステムではスクリプトの実行が無効になっているため、ファイル ~.venv\Scripts\activate.ps1 を読み込むことができません。」と出る場合

Windows10のPowerShell(コマンドラインツール)では、スクリプトを実行するときに実行ポリシーを変更してあげないと、PowerShellを管理人権限で起動していても仮想環境を有効にできないことがありました。

.venv\Scripts\activate
コマンドを打つとエラーが出る場合です。

その場合はPowerShellを管理人として実行して、

> Set-ExecutionPolicy RemoteSigned

というコマンドを打つと、仮想環境を有効に出来るようになります。

詳細は

「PowerShellでvirtualenvを使うには – Qiita」

https://qiita.com/ryu22e/items/520b35db6a444d8289da

こちらを参考にしてみて下さい。


・まとめ

まとめです。
pipenvの導入方法は
pip install pipenv
として導入。
プロジェクトのフォルダ直下にPipenvの仮想環境が作られてほしいので、システム環境変数の設定を必ず行う。

使い方は、
pipenv --python 3.7
で仮想環境を作成。
指定するPythonのバージョンはインストールされている必要がある。

仮想環境を作成したら
.venv/Scripts/activate
でアクティベート。
抜けるときは
deactivate
でディアクティベート。

あとは仮想環境に
pipenv install django==2.2
のようにして入れたいライブラリを入れていく。

(Djangoの場合はライブラリを入れたあとに
django-admin startproject プロジェクト名
このようにライブラリが用意したコマンドを打って、実際のコードを自動生成させていく。)

もしプロジェクトが要らなくなったらそのフォルダごと削除すればOK。


Pipenvについて、より詳しくは、

「Windows + Python + pipenv でらくらく開発環境構築」
https://qrunch.net/@toyocy/entries/Y2wBhjSWunnK0CPI

「Pipenvを使ったPython開発まとめ」
https://qiita.com/y-tsutsu/items/54c10e0b2c6b565c887a

これらの2つの記事が詳しいので参考にしてみて下さい。


おまけ

pipenvコマンドを使うと、

pipenv : Courtesy Notice: Pipenv found itself running within a virtual environment,
so it will automatically use that environment, instead of creating its own for any p
roject. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that envir
onment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this
warning.

という文が出ることがありました。そこで環境変数に
PIPENV_IGNORE_VIRTUALENVS=1
を追加すると
python manage.py runserver
コマンドでdjangoを動かしたときにサーバーが停止出来なくなる挙動が出ました。
なので、現在はこの環境変数は設定していません。

参考:「pipenv で任意の場所の仮想環境を使う」
https://qiita.com/tonluqclml/items/cd0d2a2cb0197cbaee42

Pythonで作ったスクリプトをexe化する方法。Pyinstallerで.exeファイルにしよう。【Windows10環境】

Pythonで作ったスクリプトをexe化する方法です。

『pyhon.py→exe化→軽量化→高速化 忘備録(pyinstaller py2exe)』
https://medium.com/lsc-psd/pyhon-py-exe%E5%8C%96-%E8%BB%BD%E9%87%8F%E5%8C%96-%E9%AB%98%E9%80%9F%E5%8C%96-%E5%BF%98%E5%82%99%E9%8C%B2-pyinstaller-py2exe-4cd7c5f70c99

こちらの記事を参考にPythonで作ったスクリプトをexeファイルにしようとしました。


僕は、Pythonのバージョン管理システムはPipenv環境なので「pip」とするところはすべて「pipenv」にしています。各自読み替えて下さい。

・まずはpyinstallerをインストールする
まず

pipenv install pyinstaller

として、pyinstallerのモジュール(ライブラリ)をインストールします。

・次にexe化したいPythonスクリプトファイル(.py)をexeに変換する

そうしたら、exe化したいスクリプトのファイル名をdo.pyだとすると

pyinstaller do.py --onefile

としてあげて、そのコマンドで作られたdistというフォルダの中に

do.exe

というファイルが作られれば完成です。

・コマンドプロンプトを出したくない場合は .py ではなく .pyw としてコマンドを実行する

実は、.pyをそのままexe化すると、プログラム実行時にコマンドプロンプトが起動した状態になります。
これでは気になる方がいると思いますので、その場合は元のスクリプトファイルの名前を

do.pyw

のように、拡張子を pyw にします。
そして

pyinstaller do.pyw --onefile

というコマンドを打つと、出来上がったプログラムファイルでは、コマンドプロンプトが起動しなくなります。ゲームやTkinterを使ったプログラムなどをexe化するときはこちらのやり方を使うと良いかもしれません。

以上です。


・おまけ

もし上記で、エラーが出た場合は、

コマンド実行後に

do.spec

というファイルが作られるので、そのファイルの中にある

hiddenimports=[]
という部分を

hiddenimports=['pkg_resources.py2_warn']

と変えてあげると良いそうです。
ちなみに、ここがポイントで、
'の部分は'(シングルクォート)だと思います(おそらく)。
分からなかったらこれをコピペして下さい。
キーボードでいうと、シフトキーを押しながら7のボタンを打つと出力される記号です。

そうしたら今度は

pyinstaller do.spec --onefile

と打つと、distというフォルダの中に

do.exe

という実行ファイルが出来上がるはずです。

以上で動きました。

何かの参考になれば幸いです。

参考:「パソコンのキーボードの記号の読み方」
http://tabotabo.my.coocan.jp/ccc/kigo.htm

「【Python】GUI表示におけるコンソール画面(コマンドプロンプト)を非表示にする方法」
https://genchan.net/it/programming/python/4183/

Fire HDのアプリ一覧。個人的に使えるオススメアプリなども紹介。Twitter、TikTok、Instagramもあるよ。

Amazon Fire HDのアプリ一覧です。需要がありそうなので載せておきます。

使えるオススメアプリなどもざっくり解説。

・FireOSアプリストアで入手できる有名アプリ一覧

(2021年1月現在)

・Twitter
・Facebook
・Facebook Messenger
・Facebook Lite
これはFacebookの軽い版らしいです。
・TikTok
・Skype(Kindle Tablet Edition)
・Spotify
音楽アプリはSpotifyかAmazon Musicの二択になるようです。Apple MusicはもちろんAWAもありません。
・Evernote
・Google Drive
・TuneIn Radio
・ATOK(日本語入力システム)有料
・Microsoft 翻訳
・OneDrive
・Microsoft Outlook
・DropBox
・ABEMA
・YouTube (FireOS版。バックグラウンド 続きを読む

Steinberg Dorico3.5の使い方メモ。個人的に気になったところなども軽くレビュー。

Steinberg Dorico3.5の使い方メモです。個人的に気になった部分などを書いていきます。

・挿入モード(I)になっていると、音符をDeleteしたときに後の音符がすべて前に詰まる

入力のモードが挿入モードになっていると、Deleteキーで音符を消したときに、それ以降に入力してある音符が前に詰まってきてしまいます。なので、挿入モードを解除してから削除しましょう。
左上にあるツールバーの「挿入」をオフにするか、「I」キーを押せばOKです。

・「ピッチをデュレーションの前に指定(K)」で音符を入力する。音価を決定するときは数字キーで。

Doricoは「ピッチをデュレーションの前に指定」の入力モードが非常に使いやすいです。これのためにDoricoを使って良いレベル。

これが何かというと、「入力する音を、MIDIキーボードで押さえて仮入力の状態に出来る」モードです。つまり、MIDIステップ入力のようなものです。

まずは入力モードを「Shift + N」でオレンジ色のカーソルが出るようにします。

そして「K」を押して「ピッチをデュレーションの前に指定」モードにします。(これは事前に設定している必要があります)

そして、例えば下から「ドミソ」の高さでキーボードを押さえると、「ドミソ」と弾いている音高がグレーに表示されます。(この時点ではまだ音符は入力されません。)
ちなみに、MIDIキーボードを離しても和音は表示され続けます。

その状態で音価(音の長さ。四分音符など)を決定するには、
数字キーの「4」で十六分音符
数字キーの「5」で八分音符
数字キーの「6」で四分音符
数字キーの「7」で二分音符
数字キーの「8」で全音符

というふうに、数字キーを押すことで決定します。
数字キーで音価を決定すると実際に音が入力されます。

・既にある和音/音符の高さを変更したい場合

既に打ってある音符や和音の高さのみを変更したい場合は

①変えたい部分の音符をクリックして選択
②Shift + Nで「ノート入力を開始」のモードにする。オレンジの縦のカーソルが表示される。
③MIDIキーボードで和音(または単音)を弾く
④終わったらESCキーを押して、ノート入力モードを解除

これで、既存の音符の音価(長さ)はそのままで、音符の高さが変わります。

・好きな場所から再生したい場合は音符を選択して、Pを押す

好きな場所から再生させたい場合はPを押します。
再生を止めるときはスペースキーを押しましょう。

ちなみに「ノート入力モード」になっていると停止が効かないので、そのときはESCキーを押しましょう。

・普段は「範囲選択ツール」の状態にしておいて、マウスの中ボタンのクリックでハンドツールを使う。

下のバーの真ん中やや右あたりに「範囲選択ツール」「ハンドツール」の切り替えが出来るボタンがあるのですが、普段は「範囲選択ツール」にしておいて、必要なときにマウスの中ボタンのクリックで譜面を掴む(ハンドツール)、というふうにすれば2つを切り替えないで十分使えます。
ハンドツールは楽譜を移動するときに便利ですね。

ひとまずこれを知っているだけでかなり楽に音符を入力できてしまいます。


随時更新していきます。

Pythonを使ってウェブ上から画像を半自動ダウンロードする方法

Pythonを使ってウェブ上から画像を半自動ダウンロードする方法です。

2020年の9月から、ジブリのホームーページ上で原画の場面写真が一般公開されています。

https://www.ghibli.jp/works/chihiro/

1つ1つダウンロードするのも手ですが、それだとなかなか大変です。

URLのパターンがパターン化されていたので、プログラムを組みました。

Pipenvでまずは環境を作りましょう。
詳しくはこちら

Pythonのバージョン管理をPipenvにした話。Windows10ではPipenvがベストプラクティスな気がする。

実際のプログラムは以下です。 続きを読む

EOS Kiss MのACアダプター互換品のレビュー。Canon EOS Kiss M用にサードパーティ製電源アダプターをAmazonで買ったら普通に使えたお話。

どうも、りーずです。
Canon EOS Kiss MのACアダプターのレビューです。

今回は純正品ではなく互換品についてです。

Canon EOS Kiss Mを楽器演奏撮影用に購入したのですが、60fps動画設定にするとバッテリーが割とすぐに無くなるので少し困っていました。純正品も、カプラーとACアダプターのバラ売りがされているのですが、結構高額です。

そこで購入したのがコチラです。

一式セット。

箱。

箱はこんな感じで割としっかりとしています。

中身。

箱を開封。

箱を開封するとこんな感じです。 続きを読む

Pythonでwavオーディオファイルをミックスする方法。2つの音声データを合成する。【Windows環境・pydubを使用】

wavオーディオファイルをPythonでミックスする方法です。2つの音声データの合成方法。

Pythonでオーディオミキシングをする方法あるのかな~と思っていたら、ありました。

pydubというPythonの音声処理用ライブラリを使います。

こちらが参考にした記事。

「How do I mix audio files using python?」
https://stackoverflow.com/questions/7629873/how-do-i-mix-audio-files-using-python

・やり方。まずは仮想環境を構築。

まず、僕の場合はpipenvで仮想環境を作成しました。
pipenv --python3.8

仮想環境を作成したら
.venv/Scripts/activate
でアクティベートさせましょう。

pipenvについては 続きを読む

Django3系でStripe決済処理を行う際にcsrftokenをviews.pyに渡す方法【Ajax】

Django3系において、Ajaxでcsrftokenをviews.pyに渡す方法です。

DjangoでStripe決済処理のチェックアウトを行う際にcsrftokenをviews.pyに渡す必要がありました。

しかし、csrftokenを用意していなかったためエラーが発生。CSRFトークンが見つからないよ!というエラーが出ていました。

これはDjangoがデフォルトではミドルウェアによってCSRF対策をしているためです。

そちらの解決方法です。

なんと普通にDjangoの公式に対応方法が書いてありました。
日本語訳は 続きを読む