VS Codeでvenvがうまく動作しなくなった話

結論 venvをあきらめて、Pipenvを導入すればなぜか解決した。 経緯 Pythonの開発環境にVS Codeを使っていましたが、ある日突然、venvで作った環境が見えなくなりました。 PowerShellからは切り替えができるので、venv自体は正しく動いているようでした。 PythonとVS Codeをクリーンインストールしても状況は変わりませんでした[1]。 Pipenvの使い方 最近はPipenvというものがあるらしいので、それを導入することとしました[2][3]。 pip install pipenv 以下のように環境変数を設定することで、プロジェクトのフォルダ直下に仮想環境を構築してくれます。 PIPENV_VENV_IN_PROJECT=true VS Code上にフォルダを作成し、その直下で仮想環境を作成します。 コマンドはVS Code上のPowerShellで行いました。 例えば以下のようになります。パスやPythonのバージョンはご自身の環境に合わせてください。 *pythonの後に半角スペースがあるのでうっかり詰めないでください。 *venvファイルが作成されるという情報もありますが、私の場合はPipfileのみ作られました。 PS PS C:\Users\User Name\Documents\CODE\Python\Test> pipenv install --python 3.8 VS Code上でF1キーを押して、「reload」を検索して実行します。 これで左下のPythonのバージョンセレクトから環境選択できるはずです。 仮想環境から抜けるときは以下のコマンドを使います。 deactivate 参考文献 [1] sota0726 「VScodeを完全にアンインストールする方法(windows10)「拡張機能のホストが予期せずに終了しました。」を改善するために」閲覧日:2020/09/13 https://www.atmarkit.co.jp/ait/articles/1810/12/news026.html [2] KRiver1 「pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う。」閲覧日:2020/09/13 h

CGIHTTPServerでのトラブル

今回もPythonの話題です.

Pythonは便利な言語で,CGIサーバーも簡単に扱うことができます.
その辺の知識は全くなかったので,みんなのPython Webアプリ編 [みんなのシリーズ]を参考にしました.

CGIサーバーの勉強中にPythonスクリプトを呼び出せないというエラーが起きたので,その対処法をメモ代わりに残しておきます.
 
ここで扱う問題は,Windowsでコーディングし,Linuxでの動作確認時に起きた問題です.

CGIHTTPServerは,サーバーを起動したカレントディレクトリ上にあるcgi-bin内にあるPythonスクリプトを呼ぶことができます.
このPythonスクリプトがうまく実行されないという問題につまづきました.
起きた現象は以下の2つです.

① プログラムが実行されずWebブラウザがスクリプトファイルをダウンロードする.

② プログラムが実行されず,スクリプトファイルの中身が表示される.

▶ 原因と解決方法


それぞれの原因と解決方法を示します.

hoge.py:ここでは実行したいPythonスクリプトを表します.

①の原因

Pythonスクリプトに実行権限がないことが原因です.

実行させたいPythonスクリプトがあるディレクトリ(通常はcgi-bin)で,以下のコマンドを実行してみてください.

$ ls -l

そのときにの以下の様な結果が表示されます.

-rw-rw-r-- 1 usr usr 553 12月  9 15:51 hoge.py

該当する実行したいスクリプトファイルの「-rw-rw-r--」の部分を見てください.
ここの一番右が「x 」になっていない場合そのファイルに実行権限はありません.

①の解決方法

Pythonスクリプトに実行権限を与えれば解決です.
以下のコマンドを実行してください(hoge.pyは実行権限を与えたいスクリプトファイル名です).

$ chmod 755 hoge.py 

先ほどの「ls -l」で実行権限を確認します.
すると以下のように右端が「x」に変わっているはずです.

-rwxr-xr-x 1 hm hm 553 12月  9 15:51 hoge.py

以上で①の問題は解決されるはずです.
ちまにみに,これはちゃんと「みんなのPython」に書いてあります.

②の原因

・実行権限も与えたのにスクリプトが表示されるだけで実行できない.
・Windowsから移植したら動かなくなった.

以上のような場合はこの原因が考えられます.
以下のコマンドを実行してください.

$ file hoge.py 

そのときに以下のように表示されていれば,ここで解説する原因と一緒です.

hoge.py: a python\015 script, ASCII text executable, with CRLF line terminators

正常な場合は,以下のように表示されます.

hoge.py: a python script, ASCII text executable

これはWindowsの改行コード(CRLF)とLinuxの改行コード(LF)が異なることが問題になっています.

②の解決方法

文字コード変換ソフトで文字コードと改行コードを変換してください.
Linuxですと,nkfというコマンドが便利です.
参考:UNIX & Linux コマンド・シェルスクリプト リファレンス

$ nkf -file hoge.py > hoge_lf.py

これでhoge_lf.pyの改行コードを調べてみてください.

hoge_lf.py: a python script, ASCII text executable

上記のように表示されていれば成功です.

この他に問題が起きた場合は,以下のコマンドを実行してみてください.

$ ./hoge.py

このhoge.pyが実行できなければ,Linux上でスクリプトとして認識されていないか,実行権限に問題があると思いますので,その辺を中心に探ってみると良いかもしれません.

以上で,Pythonを使ったCGIサーバー実行時のトラブルのまとめを終わります.

コメント

このブログの人気の投稿

C++11のためにGCCの最新版をインストールする

分解:Logicool M570

MOCO'Sキッチンのフォントに似せるβ版