##概要
VSCodeとvenvでPython仮想環境を作るとき、Powershellやらpipやらでいろいろつまったところがあったので、整理しました。具体的なトピックは、
- Powershellのアクセス権限関係
- pip installでうまくいかない
です。
##序論
Pythonで開発するにあたって、今までは仮想環境を立てずにやってきました。
しかし最近の作業で、pipでインストールするパッケージのバージョンを上げたり下げたりする必要が出てきました。
そこで仮想環境デビューすることに決めました。
##環境
OS:Windows10
Python:3.7.3 (32bit)
テキストエディタ:Visual Studio Code
仮想環境:venv
##作業内容
https://hachian.com/2019/09/19/vscode_venv/
を参考に進めました。
###仮想環境のアクティベートがうまくいかない
理想としては、仮想環境を立てるフォルダをVSCodeで開いたときに、スムーズに仮想環境を起動したいです。
仮想環境のアクティベート(起動)には、Scripts 内の activate.ps1 を実行する必要がありますが、これをPowershellで直接していすると、
.\Activate.ps1 : このシステムではスクリプトの実行が無効になっているため、
C:~Activate.ps1を読み込むことができません。
とエラー文が出ます。
どうやらPowershellでスクリプトを実行するには、Powershell起動時に管理者として実行しなければいけないらしいです。しかし今回はVSCodeに付属したターミナルでPowershellを起動しているので、管理者として実行するのは無理そう。。。
####解決策
このサイトが参考になりました。
https://attakei.net/blog/2019/windows-vscode-venv/index.html
VScodeでフォルダを開いたときには、そのフォルダ内の.vscodeフォルダ内にあるsetting.jsonを読み込んでいろいろ設定することができるらしいです。(無知)
以下をsetting.jsonに追加します。すでにsetting.jsonに何かしら書かれている場合は、既存の文末に,を打って改行した下に書きます(JSONファイルの書き方)。
{
"terminal.integrated.env.windows": {
"PSExecutionPolicyPreference": "RemoteSigned"
}
}
これでアクティベートを問題なく行うことができます。
###pip installができない
numpy や pandasはインストールできるのに、tensorflowがインストールできませんでした。以下のエラーが出てきます。
ERROR: Could not find a version that satisfies the requirement tensorflow (from versions: none)
ERROR: No matching distribution found for tensorflow
調べるとよくあるエラーらしいです。調べると、pipのバージョンが古いとダメなことがあるようです。しかし私の環境のpipは最新。
そこで以下のサイトで説明があるように、whlファイルのURLを直接指定してインストールを試みました。
https://sukota.hatenablog.com/entry/2018/10/24/160521
URLにある数字がPythonやパッケージ自体のバージョンを意味しているんですね。一応PyPIで本当に存在するものか確認後、pipで入れようとしたところ、
ERROR: tensorflow_gpu-2.2.0-cp37-cp37m-win_amd64.whl is not a supported wheel on this platform.
なるほど。私はここで諦めました。
後で気が付いたのですが、Pythonが32bitバージョンでした。公式HPからインストールするとデフォルトは64bitのOSでも32bitのPythonが入るらしいです。おそらく64bit版にしたらこれらのパッケージを受け付けてくれるんじゃないでしょうか。(Pytorchも同じエラー文で入れられませんでした)
64bit版にしたあとの状況も、追記しようと思います。
##まとめ
PowershellさんはWindowsのシステム自体がさわるもので、手でコマンドを打つならGit bashがいいです。なんたってgit clone ができる(当然)。
あとPythonは64bit版にします。怖いんで今やってる開発がひと段落したら。