python - pyenv-virtualenv 中的环境变量
问题描述
我已经创建了一个pyenv virtualenv 3.5.9 projectname
用于开发 django 项目的虚拟环境。
如何设置环境变量供我的代码使用?
我尝试/Users/developer/.pyenv/versions/projectname/bin/activate
像这样添加环境变量 DATABASE_USER:
export DATABASE_USER="dbuser"
当我试图echo $DATABASE_USER
打印一个空字符串时。
尝试安装zsh-autoenv
现在我可以echo $DATABASE_USER
获取在 .autoenv.zsh 文件中设置的值。
但我似乎无法让环境变量可用于我的 django 代码:
如果我尝试os.getenv('DATABASE_USER', '')
在 virtualenv 内的 python shell 中,我得到''
有什么问题?zsh-autoenv 变量是否仅适用于 zsh shell 而不是python manage.py shell
?
解决方案
我想知道类似的事情,我偶然发现了一个reddit 线程,其中有人问了同样的问题,并最终跟进了一些有趣的发现。
正如您所注意到的,pyenv
似乎并没有实际使用该bin/activate
文件。他们没有说激活方法是什么,但是像你一样,在那里添加环境变量没有产生任何结果。
最后,他们最终安装了autoenv,它自称是基于目录的环境。它允许您在目录中创建 .env 文件,当您cd
进入该目录时,它会运行 .env 文件。您可以将它用于环境变量,或者您可以向其中添加任何其他内容。
我在 autoenv 页面上注意到他们说您可能应该使用direnv,因为它具有更好的功能并且是更高质量的软件。这些都不是 Python 或 pyenv 特定的,如果你从目录外部调用你的 python 代码,它们可能不起作用。由于您使用的是 pyenv,因此您可能无论如何都在目录中运行您的代码,所以我认为任何一个都可以工作。
推荐阅读
- css - Bootstrap 4 - Navbar-toggler collapse works! However, if I change the stylesheet CSS on the fly, it does not work anymore?
- javascript - Getting input from user for adding rows in columns from javascript
- visual-studio-code - 同名但不同部分的 Markdown 锚链接
- multithreading - 使用 MFC CSocket 和 CWinThread 的多线程客户端服务器聊天应用程序
- php - PHP 将日期/时间从标题工具提示和格式解析为 Ymd H:i:s
- tensorflow - 自定义指标访问 X 输入数据
- python - Twine 每次都在询问我的密码:如何使用 .pypirc
- sparql - SPARQL 查询:如何获取所有个人和数据属性断言?
- python - 使用 pandas 操作数据框,创建新列并根据在数据框中查找现有数据用值填充它们
- javascript - 如何避免使用无休止的嵌套替换方法来缩写街道地址?