結論
VSCodeでPythonを扱う際、自動的に仮想環境が適用されるので、別の環境を使用したい場合は、手動でインタープリタを選択する。
はじめに
VSCode内のターミナルを使用してPythonの仮想環境であるPipenvを利用していましたが、ある時から仮想環境から抜け出せない状態になりました。
なんとか解決したので、原因と解決策をまとめます。
環境
- Mac OS 12.6.2
- Visual Studio Code 1.74.3
- pyenv 2.3.8
- pipenv 2022.11.30
Pythonはpyenvを利用してバージョン管理をしています。
Pipenvとは
プロジェクトごとに仮想環境を作成、それぞれの環境でライブラリをインストールできます。複数のプロジェクトを一台のPCで同時進行する際に、お互いに環境に影響されずにすみます。
It automatically creates and manages a virtualenv for your projects, as well as adds/removes packages from your Pipfile as you install/uninstall packages. It also generates the ever-important Pipfile.lock, which is used to produce deterministic builds.
Pipenv: Python Dev Workflow for Humans
環境の変更ができない
私はVSCodeの1つのワークスペースで複数のプロジェクトを同時進行(1つは本番用のフォルダ、1つはお試し用のフォルダ、といったように)しています。
いろいろ実験をしてみたかったので、プロジェクト(フォルダ)ごとに別のPipenvの仮想環境を作成し、インストールするライブラリを別のものにしてみようと思ったのですが、一つのPipenvの仮想環境から抜け出せなくなりました。
以前は、仮想環境に入っている状態で、「exit」コマンドで環境から抜け出せていました。
exit
それが、あるときからexitコマンド打つと、VSCodeのターミナルが閉じてしまい、仮想環境から抜け出せません。
VSCodeは自動的に仮想環境を適用する
原因を探している際、こんな記事を見つけました。
VSCodeでは適用する仮想環境(Pythonオリジナルの設定環境含む)を選択することができますが、プロジェクトとして読み込んだフォルダの階層に仮想環境がある場合はデフォルトで仮想環境を適用してくれます。(但し、フォルダ内にpythonのファイルが含まれている場合に限ります)
Pythonで仮想環境virtualenvを作成し、Visual Studio Codeで自動適用する開発環境を構築する
仮想環境を自動的に適用することがあることを知り、VSCodeの公式ドキュメントを読んでみると、以下の記述がありました。
If an interpreter hasn't been specified, then the Python extension automatically selects the interpreter with the highest version in the following priority order:Using Python environments in VS Code
やはり自動的にインタープリタを選択するようです。では、インタープリタを手動で選べば良いでしょう。
では、そもそも現在はどのインタープリタが選択されているかですが、それはVSCodeのウィンドウ右下、ステータスバーに表示されています。
現在は pipenv で application というフォルダに作成した仮想環境が動いている状態です。これを、私の場合はpyenvを利用したPython 3.9.0に切り替えたいと思います。
VSCodeで手動でインタープリタを選択する
手動でインタープリタを選択し、自動的に別の仮想環境を適用しないようにするには、
F1 もしくは shift + command + P でコマンドパレットを開きます。
「Select Interpreter」を選択します。
もしくは、右下ステータスバーのインタープリタ名をクリックすると、インタープリタ選択ウィンドウが表示されます。
「ワークスペース レベルで選択」をクリック。
表示された一覧の中から該当するインタープリタを選択します。私の場合はpyenvのPython 3.9.0です。
まとめ
VSCodeを使用してPythonを扱う際は、右下のステータスバーにて、現在どのインタープリタが適用されているかを確認してみると良いみたいです。
参考ページ