为什么 os.environ.get return 不会在 bash 配置文件中设置新值?
Why won't os.environ.get return the new value set in bash profile?
我有一个 Django 应用程序,我最近更改了使用 google smtp 的电子邮件的密码。我已经更新了 bash 配置文件中的密码,但是当我 运行 settings.py os.environ.get returns bash 配置文件中的旧密码时.
旧密码:ABC
新密码:XYZ
EMAILS_HOST_PASSWORD = os.environ.get("EMAIL_PASS")
print(EMAILS_HOST_PASSWORD)
仍然是returns ABC而不是XYZ
bash_profile 仅在您登录或使用 ssh 连接时获取,我相信这可能是使用 ~/.bashrc insted
的原因
如果您依赖环境变量,请将 python-dotenv
添加到您的项目中。
https://pypi.org/project/python-dotenv/
您将一个 .env
文件添加到您的项目(您可以更改文件名,请参阅下面设置文件名的示例),其中包含您需要设置的内容;
new_password=XYZ
然后您可以在设置中加载这些环境变量,或者像我一样 manage.py
(取决于您是否只在本地需要)
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv(filename='.environment'))
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
我有一个 Django 应用程序,我最近更改了使用 google smtp 的电子邮件的密码。我已经更新了 bash 配置文件中的密码,但是当我 运行 settings.py os.environ.get returns bash 配置文件中的旧密码时.
旧密码:ABC 新密码:XYZ
EMAILS_HOST_PASSWORD = os.environ.get("EMAIL_PASS")
print(EMAILS_HOST_PASSWORD)
仍然是returns ABC而不是XYZ
bash_profile 仅在您登录或使用 ssh 连接时获取,我相信这可能是使用 ~/.bashrc insted
的原因如果您依赖环境变量,请将 python-dotenv
添加到您的项目中。
https://pypi.org/project/python-dotenv/
您将一个 .env
文件添加到您的项目(您可以更改文件名,请参阅下面设置文件名的示例),其中包含您需要设置的内容;
new_password=XYZ
然后您可以在设置中加载这些环境变量,或者像我一样 manage.py
(取决于您是否只在本地需要)
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv(filename='.environment'))
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()