質問: ### 2/15 1:35 追記 質問5.に関して 教えていただいたPATHEXTでggるといい記事がたくさんでてきました 記事1 記事2 記事3 「環境変数名の編集」上でのPATHの追加位置が問題となるケース、 についてちょっと気になったのでpw.batとpw.pyを別のフォルダに入れて それぞれに通したPATHの並び順を入れ替えてから 「ファイル名を指定して実行」してみたりしましたが いずれも正常にpw.batが開かれ挙動は変わりませんでした。 拡張子まで完全一致でない限り、 どうやらPATHEXTの並び順さえ意識しておけば同名ファイルがうまく開けなくなったりというのは杞憂みたいですね。
回答: > > 1. > > エラーメッセージが出ているのはcmd.exe上ですが、これは意図した通りpy.exeから実行できているのでしょうか? > > > たぶん。でも、`where py.exe`等で所在を確認してください。condaのインストール先にあるかバニラのpythonのインストール先にあるかで判断するのが確実です。 それか、対話的インタプリタを立ち上げて`sys`をインポートし、`sys.prefix`か`sys.executable`を見る方法でもいいです。 > > 2-1. > > conda環境下でcondaとpipを併用するのは非推奨だと聞いていますが、 > > A案を採用するがAnacondaをアンインストールしない場合、 > > C:\WINDOWS\system32\cmd.exe 上で > > pip install pyperclip > > を実行することに競合のリスクはありますか? > > pyperclipでは競合しなくても他のモジュールで潜在的なリスクがありますか? > > > ちゃんとやれば大丈夫です。うっかりanacondaの方のpipを叩いてしまったらわかりませんが。 > > 2-2. > > 2-1.の回答が「リスクなし」の場合、 > > C:\WINDOWS\system32\cmd.exe 上で > > python -V の実行結果が > > Python 3.8.1 > > であったので、 > > 「pip install pyperclipを実行しても、pyperclipのインストール先がconda環境ではなくVanillaのPythonなので問題ない」 > > ↑理由としてはこれで合っていますか? > > > anacondaでpython3.8.1を使っているとバージョンだけでは判断できないなぁと思いました。 仮にpythonコマンドでちゃんとバニラのpythonが立ち上がっているなら、その理屈で考えて大丈夫です。 > > 3-1. > > B案の実現方法 > > > anacondaのpythonが別のマイナーバージョンで、PATHが通っていたらもしかしたら拾ってくれるかもしれません(未確認)。詳細は`py.exe -h`とかでヘルプを見てください。 特にその方法はおすすめしません。A案推奨です。 > > 4-1.環境の構造に関して、 > > Conda環境は独立したPythonの実行環境で > > 、とありますが、「独立」と「非独立」を区別する方法がわかりません。 > > 仮に「非独立」の実行環境があったとして、「非独立」部分を割り出す方法はありますか? > > > 基本的にはディレクトリが異なっているかどうかです。 ただし仮想環境を生やしたりすると生やす元の環境と生やした先の環境では共有されるものが出てくる(たとえばvenvで仮想環境を作るとデフォルト設定ではインタプリタの実行ファイルなどはシンボリックリンクになったりする)場合があります。 > > 4-2.conda環境が「独立」しているということは他の環境とファイルを共有せず、インストールする順番によらず上書きや競合は発生しないのでしょうか? > > 例えば今の自分の場合、Anaconda3インストール→VanillaのPythonインストール > > で何かが上書きされたりしますか?(ファイル、プログラムと機能、設定済みの環境変数等) > > > ファイルは違う場所なら大丈夫、他はなんとも言えません。たとえば環境変数は競合しちゃうかもしれません。 > > 5. > > 記法について調べていると、コマンドライン上やbatファイル内で > > 拡張子の有無の表記揺れが散見されます。 > > 今回の例のようにpw.bat、pw.py等、拡張子が異なるが同じ名前のファイルがあった場合、 > > 拡張子を省略するとどういうルールで何が優先して実行されますか? > > > `PATHEXT`にもとづいて名前が探索され、ものによっては`assoc`などによる関連付けで実行される。