89314


とある処理をPythonのない別PCでもできるようにexe化したいので、現在仮想環境を構築中です。  
仮想環境のためのディレクトリを作成（自作EXE）したあと以下のように実行しました。

[code]

    PS C:\Users\XXX>　cd T:\自作EXE
    PS T:\自作EXE> python -m venv project_env
    PS T:\自作EXE> cd project_env
    PS T:\自作EXE\project_env> ls
    
[/code]

出力も問題ありませんでした。

[code]

        ディレクトリ: T:\自作EXE\project_env
    
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    d-----        2022/06/10     12:28                Include
    d-----        2022/06/10     12:28                Lib
    d-----        2022/06/10     12:28                Scripts
    -a----        2022/06/10     12:28            117 pyvenv.cfg
    
[/code]

次に予め作成しておいたpyファイルを新規保存で自作EXEに保存しました。  
このときVSCodeの右下にはPython3.7.9('project_env':venv)とあり仮想環境が正常に読み込めていると理解しています。  
最後に本来なら仮想環境にモジュールはまだないはずなのでそれを確認しようとPowerShell上で次のように実行しました。

[code]

    PS T:\自作EXE> & T:\自作EXE\project_env\Scripts\Activate.ps1
    (project_env) PS T:\自作EXE> pip freeze
    
[/code]

すると元々インストールしていたモジュールがずらっと一覧で出てきてしまいました。これは仮想環境を構築できていないということでしょうか。

（追記）  
まずpyvenv.cfgについてはfalseで問題ありませんでした。  
次にコマンドプロンプトで実行したところ次のような出力結果でした。

[code]

    (project_env) T:\自作EXE\project_env\Scripts>pip list
    Package    Version
    ---------- -------
    pip        20.1.1
    setuptools 47.1.0
    WARNING: You are using pip version 20.1.1; however, version 22.1.2 is available.
    You should consider upgrading via the 't:\自作exe\project_env\scripts\python.exe -m pip install --upgrade pip' command.
    
    (project_env) T:\自作EXE\project_env\Scripts>pip freeze
    
    (project_env) T:\自作EXE\project_env\Scripts>
    
[/code]

結果を見るに、仮想環境の構築ができているかと思います。  
そこで2点追加で質問があります。

  1. 仮想環境で必要なパッケージをインストールするときにPowerShellから行うことは避けた方が良いのでしょうか（PowerShellの方では元々インストールしていたパッケージ一覧が表れたのでPowerShellから行ってもすでにインストール済みと言われるのではと考えていますができればPowerShellから行いたいです）。
  2. なぜPowerShellではうまくいかなくてコマンドプロンプトではうまくいったのでしょうか

よろしくお願いいたします。

（追記：20220613）

休日は他の用事があり返信遅くなりました。  
申し訳ありません。

いただいたアドバイスの中で文字化けというのが気になったのでそちらを試しました。（実のところ、私自身文字化けが悪さをしていると思った日があったのですが、仮想環境は一応構築されているしまぁ大丈夫だろうと甘くみていました）

[code]

    PS T:\自作EXE> & T:\自作EXE\project_env\Scripts\Activate.ps1
    (project_env) PS T:\自作EXE> $env:Path.Split(";")
    T:\閾ｪ菴廢XE\project_env\Scripts
    C:\Program Files (x86)\Common Files\Oracle\Java\javapath
    C:\WINDOWS\system32
    C:\WINDOWS
    C:\WINDOWS\System32\Wbem
    C:\WINDOWS\System32\WindowsPowerShell\v1.0\
    C:\WINDOWS\System32\OpenSSH\
    C:\TDM-GCC-64\bin
    C:\Program Files\dotnet\
    C:\Program Files\gnuplot\bin
    C:\Users\XXX\AppData\Local\Programs\Python\Python37\Scripts\
    C:\Users\XXX\AppData\Local\Programs\Python\Python37\
    C:\Users\XXX\AppData\Local\Microsoft\WindowsApps
    C:\Users\XXX\AppData\Local\Programs\Microsoft VS Code\bin
    C:\texlive\2020\bin\win64
    C:\texlive\2020\bin\win32
    (project_env) PS T:\自作EXE>
    
[/code]

やはりご指摘通り文字化けしておりました。  
恐らく今までの原因はこれにあると思います。

実際に日本語を使用せず新しく作り直し、仮想環境を構築した結果は以下です。

[code]

    PS T:\PROJECT_Automation> &T:\PROJECT_Automation\project_env\Scripts\Activate.ps1
    (project_env) PS T:\PROJECT_Automation> pip freeze
    (project_env) PS T:\PROJECT_Automation>
    
[/code]

一連の原因は日本語を使用したことと結論付けます。  
なお、ビット数については64bitで間違いありません。確認しました。  
種類と版数については勉強不足ゆえ、確認方法がわからず断念しました。  
windowsターミナルを開いたらでてくるpowershellをそのまま利用しています。  
（添付記事をざっと確認したのですが、恥ずかしながら、Windows PowerShellとPowerShellCoreの違いがいまいち理解できませんでした）

ともあれ、これで仮想環境の構築ができましたので作業を続けようと思います。  
長い間ありがとうございました。


CC BY-SA 4.0
2022-06-10T03:55:14.767
89310
2022-06-13T07:00:37.467
2022-06-13T07:00:37.467
48769
48769
question
python python-venv
pythonの仮想環境を構築してもモジュールがある


操作に特に問題があるようには見えないのですが、もしかしたら`pyvenv.cfg`の中身が普通とは違っているかもしれません。

例えば`pyvenv.cfg`はこんな内容のテキストファイルになっているはずですが：

[code]

    home = C:\Users\UserName\AppData\Local\Programs\Python\Python310
    include-system-site-packages = false
    version = 3.10.4
    
[/code]

`include-system-site-packages` が `false` ではなく `true` だと質問の現象が考えられます。

確認して `true` だったら `false` に変更してみてください。

あるいは`Activate.ps1`を実行する前の環境とかが何か影響しているのかも？  
VSCodeからでは無く、単独で PowerShell や コマンドプロンプト
のウインドウを立ち上げて仮想環境をActivateした場合はどうなるかも実験してみた方が良いかもしれません。

参考：  
[venv --- 仮想環境の作成](https://docs.python.org/ja/3/library/venv.html)

>
[code]

>     usage: venv [-h] [--system-site-packages] [--symlinks | --copies]
> [--clear]
>                 [--upgrade] [--without-pip] [--prompt PROMPT] [--upgrade-
> deps]
>                 ENV_DIR [ENV_DIR ...]
>  
>       --system-site-packages
>                             Give the virtual environment access to the
> system
>                             site-packages dir.
>  
[/code]

> 作成された`pyvenv.cfg`ファイルには、`include-system-site-
> packages`キーも含まれます。これは`venv`が`--system-site-packages`オプションをつけて実行されたなら`true`
> で、そうでなければ`false`です。

[Python3 の venv
モジュールはどのように仮想化を実現しているのかを調べてみた](https://qiita.com/nassy20/items/0f438f638e03fbd9e566)  
[[Python] システムワイドのパッケージを利用できるように venv を作成するオプション --system-site-
packages](https://tekunabe.hatenablog.jp/entry/2021/04/21/python--system-site-
packages)

* * *

**追記：**

PowerShellでの環境ですが、発生している現象的には`Activate.ps1`のプロンプト変更だけ行われて環境変数の置き換えが行われていない印象を受けます。

類似の現象としては以下の記事のようにExecutionPolicyが合っていないというのがありますが、記事のようなエラーは発生していないようなので、どうも良く分かりません。  
[【Windows版Visual Studio
Code】Pythonのvenvを楽に使う方法](https://zenn.dev/nekocodex/articles/eb3403961ad9b966ff6e)

しかし記事冒頭とコメントに書かれた内容で、PowerShellの種類・版数がいくつかあるので、それの違いで別の現象が発生している可能性があるかもしれません。

PowerShellの種類・版数を追記してみてください。

* * *

原因かどうか不明ですが、関係がありそうなこんな記事を見つけました。  
[Windows10のVSCodeでvenvを利用するときの注意点](https://qiita.com/Avocado/items/3e71870815d6c54c1eea)

特に以下ですね。

> **プロジェクトのパス・フォルダー名には日本語を使わない**
>
> **日本語をパス・フォルダ名に含めるとActivationスクリプトの中身が一部文字化けします。**  
>  仮想化が正常に機能しないので、日本語の使用を避けます。

こう書いてあるということは、フォルダを作り直すのも手でしょうが、その前に`Activate.ps1`の中を見て、文字化けしているようなら編集して修正出来れば動くかもしれませんね。

ちなみに`Activate.ps1`を実行してプロンプトが`(project_env) PS
T:\自作EXE>`になった状態で`$env:Path.Split(";")`を実行すると`PATH`がどうなっているか確認出来るでしょう。  
それで`T:\自作EXE\project_env\Scripts`が最初に無かったり文字化けしていたら上記の関連でしょうし、そこには問題が無いのなら別の原因でしょう。

それから同記事の他の注意事項もチェックしてみてください。

* * *

あとは可能性としては不明ですが、32bit Pythonを使っているとか？

最初の段階で影響があるような感じではありませんが、こんな記事もありますし。  
[VSCode+venv環境構築でつまったところ](https://qiita.com/wish/items/3db5699db012598946bd)

> 後で気が付いたのですが、Pythonが32bitバージョンでした。

こちらの記事だとVSCode上の版数や環境の表示に 64bit と表示されるようですが、質問では書かれていませんでしたので。  
[vscodeからpythonの仮想環境の実行方法](https://www.sigublog.com/vscodepython_venv/)  
[【vscode】環境構築
#1-venvで仮想環境作成-【Python】](https://hachian.com/2019/09/19/vscode_venv/)


CC BY-SA 4.0
2022-06-10T07:05:09.060
89314
2022-06-11T02:41:45.907
2022-06-11T02:41:45.907
26370
26370
89310
answer