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

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

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

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

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

Q&A

解決済

1回答

8386閲覧

python-dotenvをpip install すると何が起きているのか?

退会済みユーザー

退会済みユーザー

総合スコア0

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

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

0グッド

0クリップ

投稿2018/10/07 04:59

編集2018/10/07 13:02

前提・実現したいこと

この質問をさせて頂いてから判明したことがあったのでリンクします。

FlaskでWebアプリケーションを作成したいので少しずつ調べながらやってます。

Flaskのデバッグ中にpython-dotenvを推奨する警告が出たのでinstallしてみたところ、
権限エラーが発生するようになることが分かりました。

(間違いがあれば指摘いただけるとうれしいです。)
python-dotenvは、
環境変数などを管理し外部公開する時に重要な情報を見せないように利用されることは調べてみて分かったのですが
pip installを実行したことによって
何が変わってしまっているのか、何をしなければいけないのかが分からなかったので質問させて頂くことにしました。

python-dotenvを入れるにあたって、flaskではどのような設定が必要になるのでしょうか?
また、それは既存のファイルを書き換えますか?
それともapp.pyなどを任意の場所に作成して以下のような変数を宣言するのでしょうか?
FLASK_APP="Hoge"

発生している問題・エラーメッセージ

pip install python-dotenv を実施すると下記ソースコードでPermissionErrorが起きる。

該当のソースコード

python

1from flask import Flask, render_template 2 3app = Flask(__name__) 4 5 6@app.route('/') 7def index(): 8 return render_template('index.html') 9 10 11if __name__ == '__main__': 12 app.debug = True 13 #ここでPermissionError 14 app.run(host='127.0.0.1', port=8000)

試したこと

同じソースでpython-dotenvがあればエラー、なければエラーにならないこと。

.envディレクトリの権限がUserがフルコントロールであること。(右クリック→プロパティ→セキュリティ)
表示されているすべてのユーザーを一時的にフルコントロールにしてみましたがダメでした。

VisualStudioCodeからではなく、PowerShellを管理者実行しても権限エラーが出た。

試しにプロジェクトの読取専用(一部)を外してみましたが、変わりませんでした。

補足情報(FW/ツールのバージョンなど)

Windows10 HOME

VisualStudioCode

Python 3.6.6

(.env) > pip freeze
astroid==2.0.4
Click==7.0
colorama==0.3.9
Flask==1.0.2
isort==4.3.4
itsdangerous==0.24
Jinja2==2.10
lazy-object-proxy==1.3.1
MarkupSafe==1.0
mccabe==0.6.1
pylint==2.1.1
python-dotenv==0.9.1
rope==0.11.0
six==1.11.0
typed-ast==1.1.0
Werkzeug==0.14.1
wrapt==1.10.11


#追記①

VSCode のターミナル(Bash)で実行

Bash

1$ powershell 2Windows PowerShell 3Copyright (C) Microsoft Corporation. All rights reserved. 4 5[PS](*'-')<D:\DevNotes\ProjectFolder> .env/Scripts/Activate 6(.env) [PS](*'-')<D:\DevNotes\ProjectFolder> pip list 7Package Version 8----------------- ------- 9astroid 2.0.4 10Click 7.0 11colorama 0.3.9 12Flask 1.0.2 13isort 4.3.4 14itsdangerous 0.24 15Jinja2 2.10 16lazy-object-proxy 1.3.1 17MarkupSafe 1.0 18mccabe 0.6.1 19pip 18.1 20pylint 2.1.1 21python-dotenv 0.9.1 22rope 0.11.0 23setuptools 40.4.3 24six 1.11.0 25typed-ast 1.1.0 26Werkzeug 0.14.1 27wheel 0.32.1 28wrapt 1.10.11 29(.env) [PS](*'-')<D:\DevNotes\ProjectFolder> pip show python-dotenv 30Name: python-dotenv 31Version: 0.9.1 32Summary: Add .env support to your django/flask apps in development and deployments 33Home-page: http://github.com/theskumar/python-dotenv 34Author: Saurabh Kumar 35Author-email: me+github@saurabh-kumar.com 36License: UNKNOWN 37Location: d:\devnotes\ProjectFolder.env\lib\site-packages 38Requires: 39Required-by: 40(.env) [PS](*'-')<D:\DevNotes\ProjectFolder> 41 42## インタープリタをPython3.6.6(virtualenv) 43## デバッグをPython:Flask で実行 44 45Traceback (most recent call last): 46File "c:\program files (x86)\microsoft visual studio\shared\python36_64\Lib\runpy.py", line 193, in _run_module_as_main 47"__main__", mod_spec) 48File "c:\program files (x86)\microsoft visual studio\shared\python36_64\Lib\runpy.py", line 85, in _run_code 49exec(code, run_globals) 50File "c:\Users\defau.vscode\extensions\ms-python.python-2018.8.0\pythonFiles\experimental\ptvsd\ptvsd\__main__.py", line 211, in <module> 51singlesession=args.single_session) 52File "c:\Users\defau.vscode\extensions\ms-python.python-2018.8.0\pythonFiles\experimental\ptvsd\ptvsd\__main__.py", line 205, in main 53debug_main(addr, name, kind, *extra, **kwargs) 54File "c:\Users\defau.vscode\extensions\ms-python.python-2018.8.0\pythonFiles\experimental\ptvsd\ptvsd\_local.py", line 28, in debug_main 55run_module(address, name, *extra, **kwargs) 56File "c:\Users\defau.vscode\extensions\ms-python.python-2018.8.0\pythonFiles\experimental\ptvsd\ptvsd\_local.py", line 53, in run_module 57run(argv, addr, **kwargs) 58File "c:\Users\defau.vscode\extensions\ms-python.python-2018.8.0\pythonFiles\experimental\ptvsd\ptvsd\_local.py", line 125, in _run 59_pydevd.main() 60File "c:\Users\defau.vscode\extensions\ms-python.python-2018.8.0\pythonFiles\experimental\ptvsd\ptvsd\_vendored\pydevd\pydevd.py", line 1752, in main 61globals = debugger.run(setup['file'], None, None, is_module) 62File "c:\Users\defau.vscode\extensions\ms-python.python-2018.8.0\pythonFiles\experimental\ptvsd\ptvsd\_vendored\pydevd\pydevd.py", line 1099, in run 63return self._exec(is_module, entry_point_fn, module_name, file, globals, locals) 64File "c:\Users\defau.vscode\extensions\ms-python.python-2018.8.0\pythonFiles\experimental\ptvsd\ptvsd\_vendored\pydevd\pydevd.py", line 1123, in _exec 65runpy._run_module_as_main(module_name, alter_argv=False) 66File "c:\program files (x86)\microsoft visual studio\shared\python36_64\Lib\runpy.py", line 193, in _run_module_as_main 67"__main__", mod_spec) 68File "c:\program files (x86)\microsoft visual studio\shared\python36_64\Lib\runpy.py", line 85, in _run_code 69exec(code, run_globals) 70File "D:\DevNotes\ProjectFolder.env\lib\site-packages\flask\__main__.py", line 14, in <module> 71main(as_module=True) 72File "D:\DevNotes\ProjectFolder.env\lib\site-packages\flask\cli.py", line 894, in main 73cli.main(args=args, prog_name=name) 74File "D:\DevNotes\ProjectFolder.env\lib\site-packages\flask\cli.py", line 548, in main 75load_dotenv() 76File "D:\DevNotes\ProjectFolder.env\lib\site-packages\flask\cli.py", line 608, in load_dotenv 77dotenv.load_dotenv(path) 78File "D:\DevNotes\ProjectFolder.env\lib\site-packages\dotenv\main.py", line 255, in load_dotenv 79return DotEnv(f, verbose=verbose).set_as_environment_variables(override=override) 80File "D:\DevNotes\ProjectFolder.env\lib\site-packages\dotenv\main.py", line 95, in set_as_environment_variables 81for k, v in self.dict().items(): 82File "D:\DevNotes\ProjectFolder.env\lib\site-packages\dotenv\main.py", line 74, in dict 83values = OrderedDict(self.parse()) 84File "D:\DevNotes\ProjectFolder.env\lib\site-packages\dotenv\main.py", line 79, in parse 85f = self._get_stream() 86File "D:\DevNotes\ProjectFolder.env\lib\site-packages\dotenv\main.py", line 62, in _get_stream 87return io.open(self.dotenv_path) 88PermissionError: [Errno 13] Permission denied: 'D:\DevNotes\ProjectFolder\.env' 89

次は仮想環境ではない、ローカルのpipです。

bash

1$ pip freeze 2astroid==2.0.4 3Click==7.0 4colorama==0.3.9 5cycler==0.10.0 6future==0.16.0 7isort==4.3.4 8itsdangerous==0.24 9Jinja2==2.10 10kiwisolver==1.0.1 11lazy-object-proxy==1.3.1 12MarkupSafe==1.0 13matplotlib==3.0.0 14mccabe==0.6.1 15numpy==1.15.2 16pefile==2018.8.8 17pylint==2.1.1 18pyparsing==2.2.1 19pypiwin32==223 20python-dateutil==2.7.3 21pywin32==223 22six==1.11.0 23typed-ast==1.1.0 24virtualenv==16.0.0 25Werkzeug==0.14.1 26wrapt==1.10.11

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

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

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

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

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

guest

回答1

0

ベストアンサー

本題にお答えする前に、いろいろと外堀を埋めなければならないご質問です。

pip install python-dotenvを実施すると下記ソースコードでPermissionErrorが起きる。

pip installは独立したコマンドで、ソースの内容とは関係ありません。
実行すると、パッケージ(今回の場合はpython-dotenv)をダウンロードして、規定のディレクトリにインストールします。それにより、ソースコードの中からそのパッケージをimportしたり、そのパッケージが提供するコマンドを実行するといったことができるようになります。
このとき、規定のディレクトリに、pip installを実行したユーザーの書き込み権限がないと上記のエラーとなります。

対応方法は、利用中のPythonがどのように(どこに)インストールされたかによって変わります。


追記

dotenvの利用法はご覧になってますか。
https://github.com/theskumar/python-dotenv
.envという名前のファイルを用意する必要があり、それを読み込んで情報取得するようです。

エラーのトレースを見ると、.envというフォルダを読み込もうとしてますが。

投稿2018/10/07 12:29

編集2018/10/07 17:10
morinatsu

総合スコア395

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

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

退会済みユーザー

退会済みユーザー

2018/10/07 13:03 編集

こんばんは、ご回答&ご質問ありがとうございます! どこに、というのは仮想環境であるかどうかという理解であっているでしょうか? 以下のもので外堀が埋まるでしょうか? もし違った場合、お手数かけてしまいますがどのような情報があればよいかご教示いただければ幸いです。 マークダウンができなかったので質問の方に追記させて頂きました。
退会済みユーザー

退会済みユーザー

2018/10/08 06:07

動きました!! リファレンスをしっかり読んでいませんでした…申し訳ないです。 python-dotenvが動作する環境を作っていないことが原因でした。 .env setting.py を作成&設定することでデバッグ実行することが出来て、view関数などから.envの内容を取得できることが確認できました! python-dotenvを利用する場合は.envというファイルは予約されているので使ってはいけないのですね…。 そして、公開したくないものは.env、公開しても構わないものは.flaksenvといった使い分けがあったりするのですね…、使い道も大まかに分かった気になれました。 本当に助かりました、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問