#なぜ書いたか
- 何度か同じミスでハマってしまったので、再発防止に。
- ミスを整理して言語化する事で、自分の理解を深めるため
環境
- Python :3.7.4
- VSCode:1.58.2
##venvで作った仮想環境で実行できない
原因|VScodeコンソールのwslからpythonファイルを実行していなかった
VScodeコンソールのwslのコマンドからの実行と、VSデバッグ機能からの実行では参照するpython環境が違っていた。
wsl:仮想環境上のpython環境
デバッグ機能:vscode設定上でインタープリタとして設定されているpython環境
###対策案
- wsl上からコマンドで実行(vscodeが勝手に仮想環境を使ってくれる?)
- vscodeのインタープリタを仮想環境上のものに設定。(インタープリタ選択画面から仮想環境上のpython.exeを指定すればできるはずだが仮想環境にexe見当たらず)
##インストールしたはずのライブラリが認識されずデバッグが失敗
原因|PC内に複数のpython環境があり、インストールした環境とデバッグ実行に参照していた環境が異なっていた。
計3つの環境があった
- 公式python
- anaconda
- 今回作成の仮想環境
wsl→③
vscodeデバッグ機能→②
を参照していたために、wslから③環境にライブラリをインストールしてもデバッグ機能で実行すると参照できなかった。
####対策|
②環境を削除し、デバッグ機能→①参照するように変更
##環境変数を通してもVSCodeのPowerShellからPythonが実行できない。
####原因|不明。VSCode経由でない方法だと実行できたので、環境変数の問題ではないところまでは確認。
####対策|コマンドを「Python」ではなく「Py」にすると実行できた。インタラクティブモードでの実行になるらしい。
####参考URL|https://gammasoft.jp/blog/resolve-not-to-run-python/
##自作モジュールのimportに失敗(mod1.pyからmod2.pyのimportに失敗)
mod1.pyを直接実行していた場合にはimportに成功していたが、DjangoProjectに含めるとし失敗した。
DjangoProject/
├ DjangoApp/
├ urls.py/
└ 自作パッケージ/
├ mod1.py/
└ mod2.py/
####原因|実行されるファイルがmod1.pyから変わってしまったため、import時に参照されるディレクトリが変わってしまったこと
####対策|相対インポートであることを明示的に記述する
import mod2 → from . import mod2
####参考URL|https://note.nkmk.me/python-relative-import/
##VSCodeターミナルから実行した場合とVSCodeのdebugモードにおける基準パスの違い
開発中にDjangoの実行方法を「VSCodeターミナルからrunserver」->「VSCodedebugモード」に変更。変更前では問題なく動いていたSeleniumが、変更後に↓のようなエラーが発生。
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
原因|各実行方法で基準となるディレクトリが異なっていた
- 変更前:Djangoプロジェクトのmanage.pyのあるディレクトリ
- 変更後:VSCodeで開いているフォルダのディレクトリ
対策|(暫定)VSCodeで開くフォルダをDjangoプロジェクトのディレクトリと一致させる。
***.htmlファイルがvscodeにhtmlファイルとして認識されない
Djangoプロジェクト内に作成したhtmlファイルとして認識されず、シンタックスハイライトや拡張機能によるスニペットも利用できない。「コマンドパレット」→「言語モードの変更」をしようとしても言語モードの候補にHTMLがない。
原因|***.htmlファイルがDjangoのテンプレートとして認識されていたため。
対策|
- VScodeにDjangoの拡張機能を追加。
- 言語モードの変更で「Django HTML」を選択
参考|VSCodeのsetting.jsonの変更でも対応可能らしい。