web-dev-qa-db-ja.com

python-dotenvをインストールしましたが、pythonが見つかりません

flaskプロジェクトでdotenvを使用しています。また、これをダンプテスト環境でもテストしました。アンインストールや再インストールなどを試みましたが、pythonでdotenvモジュールが見つかりません。

起動時にflaskは、いくつかの.envファイルがあることを確認し、dotenvがインストールされていて、フラスコシステムライブラリでそれを確認できますが、dotenvをインストールするように指示します。

This is what happens at the command line.

コードを実行すると、dotenvが見つからないというモジュールが見つかりませんというエラーが表示されます。コードは

import os
from dotenv import load_dotenv
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

そしてエラーは

The error message

アドバイスはありがたいことに受け入れられました。

3
Mark Kortink

私のコードには多くの問題があったことがわかりました。他の誰かが同じ問題を経験した場合に備えて、ここに簡単にリストします。

最初の問題

かなり新しいので、pythonエコシステムを一緒にインストールしたエコシステムがどのようにハングアップするか、本当に明確ではありません。AnacondaとSpyderを開発環境としてインストールしました。しかし、Flaskチュートリアル、仮想環境のインストーラーとしてpipを使用しています。使用するコマンドプロンプトは、Anacondaに付属しているものです。dotenv問題が発生するまで、すべてが正常に機能しているようです。全体的にかなり大きなチュートリアルの詳細。

Dotenvを修正するために、pipを使用してあらゆる種類のインストール/アンインストールを試みましたが、dotenv wasが既にインストールされていることがわかりました!それはうまくいきませんでした。機能したのは、コマンドプロンプトでcondaを使用してdotenvをインストールすることでしたが、dotenvの取得元を明示的に指定する必要がありました。機能したコマンドは

_conda install -c conda-forge python-dotenv_

2番目の問題

Dotenvをインストールしたら、_.env_ファイルから環境変数を設定できませんでした。このチュートリアルでは、os.path.dirname(__file__)を使用して現在の作業ディレクトリを取得します。 ___file___は常に小文字ですが、私のディレクトリには大文字が含まれています。その結果、_.env_ファイルの絶対パスが見つかりませんでした!大文字小文字を区別する組み込みのpathlibモジュールを使用してこれを修正しました。ここにいくつかのコードがあります。

_import os
from pathlib import Path
from dotenv import load_dotenv

# Get the base directory
basepath = Path()
basedir = str(basepath.cwd())
# Load the environment variables
envars = basepath.cwd() / '.env'
load_dotenv(envars)
# Read an environment variable.
SECRET_KEY = os.getenv('SECRET_KEY')
_
1
Mark Kortink