質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

Q&A

解決済

3回答

4690閲覧

ModuleNotFoundErrorの解決、Anacondaとpy.exeの両立、環境の構造について

N-B-I

総合スコア12

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

0グッド

0クリップ

投稿2020/02/12 10:01

編集2020/03/01 04:28

前提・実現したいこと

ファイル名を指定して実行から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の並び順さえ意識しておけば同名ファイルがうまく開けなくなったりというのは杞憂みたいですね。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

1.
エラーメッセージが出ているのはcmd.exe上ですが、これは意図した通りpy.exeから実行できているのでしょうか?

たぶん。でも、where py.exe等で所在を確認してください。condaのインストール先にあるかバニラのpythonのインストール先にあるかで判断するのが確実です。
それか、対話的インタプリタを立ち上げてsysをインポートし、sys.prefixsys.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などによる関連付けで実行される。

投稿2020/02/12 11:29

hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

N-B-I

2020/02/14 16:45

たくさん回答頂いてありがとうございます おかげ様でモヤモヤがすっきり片付きました
guest

0

本の通りにやってうまく行かないのであれば、本がダメなのか、あなたが本通りにやっていないかのどちらかです。
本を見たわけではありませんが、本がanacondaを考慮していないからのようですので、anacondaを使用しないのが一番です。
「進行の便宜上」と言っていますが、こうやっていつまでもトラブルを抱えてまでそれは達成すべき事ですか?
(おそらく勉強のために本を呼んでいると思いますので、復習を兼ねて一からやり直す、という考えがあってもいいと思いますが)

py.exeに関して、これはPython公式のWindows版配布物にのみ入っており、公式の配布物のバージョンしか対応していないと思います。
anacondaは、公式から見れば所詮第二配布者であるので、anacondaの事は考慮に入れていないと思いますが、もし何だったら「py -0p」で対応しているバージョンとパスの一覧が出ますので、それで確認してください。

というわけで、絶対にA案を採る事をおすすめします。

5.
今回の例のようにpw.bat、pw.py等、拡張子が異なるが同じ名前のファイルがあった場合、
拡張子を省略するとどういうルールで何が優先して実行されますか?

また、前述した複数の拡張子は左側の優先度が最も高く、右へ移動しながらファイルが検索されます。

例えば sample.vbs というファイルを、コマンドプロンプトにて sample と実行した場合、以下に示す順序でファイルが検索されます。

.COM .EXE .BAT .CMD .VBS (この拡張子で実行)

だそうです。

投稿2020/02/14 12:23

katsuko

総合スコア3538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

N-B-I

2020/02/14 16:47

無事解決しました。お力添えありがとうございます。
guest

0

・「python -V」で「Python 3.8.1」と表示されるのであれば、「pip install pyperclip」で良いように思います。(当方の環境にはAnacondaしか入っていないため検証はできませんが)

・Anacondaを使用していてpip installが必要な場合には、専用の仮想環境を作成してそこでpip installします。その環境では全てpip installでモジュールをインストールします。

投稿2020/02/12 10:48

meg_

総合スコア10760

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

N-B-I

2020/02/14 04:05

>>専用の仮想環境を作成 お手軽で応用が効きそうです 壊れたら切り落せばいいですもんね (と、いうよりそもそもbase環境ばかり使うほうがリスク管理上よろしくないのでしょうね) 環境の管理について調べてみますね ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問