前提・実現したいこと
ファイル名を指定して実行からpw.batを開き、py.exeからpw.pyを実行したいです。
経緯はこちらの記事とほぼ同じですが加えてお尋ねしたいことがあります。
「退屈なことはPythonにやらせよう」の冒頭のガイドに従いAnaconda3をインストールした後、
6章文字列操作6.3プロジェクト:パスワードロッカーでpy.exeが必要になりましたが、
Anacondaには含まれないため加えてpy.exeが内包されるVanillaのPython3.8をインストールしました。
上記の記事とはインストールの順番が逆です。
ファイル名を指定して実行 より
pw email
と打ち込むと以下のメッセージが現れます。
発生している問題・エラーメッセージ
C:\WINDOWS\system32\cmd.exe 上で
Traceback (most recent call last): File "C:\Users\test\Documents\PythonScripts\pw.py", line 7, in <module> import pyperclip ModuleNotFoundError: No module named 'pyperclip' 続行するには何かキーを押してください . . .
該当のソースコード
Python3
1#! python3 2# 脆弱性あり 3 4passwords = {'email':'skttsf','blog':'asgraerg','luggage':'132345'} 5 6import sys 7import pyperclip 8if len(sys.argv) < 2: 9 print('使い方:python pw.py[アカウント名]') 10 print('パスワードをクリップボードにコピーします') 11 sys.exit() 12 13account = sys.argv[1] #最初のコマンドライン引数がアカウント名 14 15if account in passwords: 16 pyperclip.copy(passwords[account]) 17 print(account + 'のパスワードをクリップボードにコピーしました') 18else: 19 print(account + 'というアカウント名はありません')
bat
1@py.exe C:\Users\test\Documents\PythonScripts\pw.py %* 2@pause
試したこと
conda list の実行結果の抜粋
C:\WINDOWS\system32\cmd.exe 上で
Name Version Build Channel
pyperclip 1.7.0 py_0 conda-forge
conda環境のPython 3.7.4 Shellでimport pyperclipできるのを確認済み
py.exe -V の実行結果
C:\WINDOWS\system32\cmd.exe 上で
Python 3.8.1
python -V の実行結果
C:\WINDOWS\system32\cmd.exe 上で
Python 3.8.1
補足情報(FW/ツールのバージョンなど)
Windows10
Anaconda3 2019.10 (Python 3.7.4 64-bit)
Python 3.8.1 (64-bit)
Python Launcher
自分の現状の理解
py.exe、pw.bat、pw.py共にPATHは通っている。
conda環境にはpyperclipがインストールされているが
後からインストールしたVanillaのPython3.8.1にpyperclipがインストールされていない。
py.exeが呼び出している実行環境がVanillaのPython3.8.1であるため当然無いものはimportできない。
A案:Python3.8.1に対してpyperclipをインストール
単にAnacondaをアンインストールしてpip install pyperclipでPython3.8.1に対してpyperclipをインストールしてしまうのが一番手っ取り早そうではあるが、「退屈なことはPythonにやらせよう」の進行の便宜上、できることならAnacondaとpy.exeを両立したい。
B案:py.exeが実行する環境をcondaにすげ替える
方法はわかりませんが…
質問群
1.
エラーメッセージが出ているのはcmd.exe上ですが、これは意図した通りpy.exeから実行できているのでしょうか?
2-1.
conda環境下でcondaとpipを併用するのは非推奨だと聞いていますが、
A案を採用するがAnacondaをアンインストールしない場合、
C:\WINDOWS\system32\cmd.exe 上で
pip install pyperclip
を実行することに競合のリスクはありますか?
pyperclipでは競合しなくても他のモジュールで潜在的なリスクがありますか?
2-2.
2-1.の回答が「リスクなし」の場合、
C:\WINDOWS\system32\cmd.exe 上で
python -V の実行結果が
Python 3.8.1
であったので、
「pip install pyperclipを実行しても、pyperclipのインストール先がconda環境ではなくVanillaのPythonなので問題ない」
↑理由としてはこれで合っていますか?
3-1.
B案の実現方法
**4-1.**環境の構造に関して、
Conda環境は独立したPythonの実行環境で
、とありますが、「独立」と「非独立」を区別する方法がわかりません。
仮に「非独立」の実行環境があったとして、「非独立」部分を割り出す方法はありますか?
**4-2.**conda環境が「独立」しているということは他の環境とファイルを共有せず、インストールする順番によらず上書きや競合は発生しないのでしょうか?
例えば今の自分の場合、Anaconda3インストール→VanillaのPythonインストール
で何かが上書きされたりしますか?(ファイル、プログラムと機能、設定済みの環境変数等)
5.
記法について調べていると、コマンドライン上やbatファイル内で
拡張子の有無の表記揺れが散見されます。
今回の例のようにpw.bat、pw.py等、拡張子が異なるが同じ名前のファイルがあった場合、
拡張子を省略するとどういうルールで何が優先して実行されますか?
御回答を頂いての追記 2/14 13:10
C:\WINDOWS\system32\cmd.exe 上で
Microsoft Windows [Version 10.0.18363.657] (c) 2019 Microsoft Corporation. All rights reserved. C:\Users\test>where python C:\Users\test\AppData\Local\Programs\Python\Python38\python.exe C:\Users\test\Anaconda3\python.exe C:\Users\test\AppData\Local\Microsoft\WindowsApps\python.exe C:\Users\test>where py.exe C:\Users\test\AppData\Local\Programs\Python\Launcher\py.exe
→pythonが3つ…?
C:\Users\test\AppData\Local\Programs\Python\Python38\python.exe
C:\Users\test\AppData\Local\Microsoft\WindowsApps\python.exe
の2つはまた別環境なのでしょうか?
→py.exeはVanillaのpythonのインストール先にある
C:\Users\test\AppData\Local\Programs\Python\Launcher\py.exe 上で
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.prefix 'C:\Users\test\AppData\Local\Programs\Python\Python38' >>> sys.executable 'C:\Users\test\AppData\Local\Programs\Python\Python38\python.exe'
→py.exeが呼び出しているのは
C:\Users\test\AppData\Local\Programs\Python\Python38\python.exe
で間違いない
Anaconda Prompt (Anaconda3)上で
(base) C:\Users\test>python -V Python 3.7.4
→Anacondaで使っているのはPython3.7.4
#結論:cmd上でpip install pyperclipします
2/15 1:35 追記
質問5.に関して
教えていただいたPATHEXTでggるといい記事がたくさんでてきました
記事1
記事2
記事3
「環境変数名の編集」上でのPATHの追加位置が問題となるケース、
についてちょっと気になったのでpw.batとpw.pyを別のフォルダに入れて
それぞれに通したPATHの並び順を入れ替えてから
「ファイル名を指定して実行」してみたりしましたが
いずれも正常にpw.batが開かれ挙動は変わりませんでした。
拡張子まで完全一致でない限り、
どうやらPATHEXTの並び順さえ意識しておけば同名ファイルがうまく開けなくなったりというのは杞憂みたいですね。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/14 16:45