向anaconda注册可自定义的环境变量

时间:2018-12-28 05:59:02

标签: python environment-variables anaconda

通过跑步 conda env export > environment.yml 我可以使人们轻松克隆和复制我的环境。

但是我还需要它们设置一些环境变量。使用PHP(Laravel)时,我有一个.env文件(被git忽略),用户可以在其中放置帐户详细信息,密码,令牌等。提供了一个文件.env.example,允许用户查看所需的文件。价值观。因此,我使用python类实现了该功能,但在r / learnpython中却对此不满意(“ ...让您的用户可以自己绞死”)。

进一步阅读后,我在项目根目录中创建了一个文件activate

export \
    GITHUB_ACCESS_TOKEN="your value goes here", 
    BENNO="test",

因此,用户现在只需运行source activate即可注册变量。但是我看到几个问题

  • activate已提交,如何保护用户避免意外发布此内容?
  • 退出conda环境后,变量GITHUB_ACCESS_TOKEN仍处于活动状态。我希望conda环境可以保留一组单独的环境变量?
  • 用户每次重新启动终端时都必须运行激活脚本
  • 激活脚本不支持Windows使用
  • 原理仍然与PHP中的.env.example相同,这很糟糕?

总而言之,我想要一种干净的简单方法来存储依赖项和可自定义的环境var,从而允许为conda用户进行简单安装,但如果可能的话,还可以为更多的python用户提供安装。这里有哪些好的做法?我能以某种方式在environment.yml中列出var吗?

2 个答案:

答案 0 :(得分:1)

我更喜欢您的原始解决方案。只要在README文件和注释中有足够的警告,就忽略“绳索”参数。创建一个防呆系统是不可能的。如果要检查,请添加一个Environment变量,以防止默认环境按原样运行。这样可以确保环境已被修改以供使用,或者至少用户必须查看该文件。

如上所述,强制用户重命名示例文件并进行检查,可以解决此处出现的问题。

答案 1 :(得分:0)

就像@Strom一样,我原来的解决方案还不错。确实按照以下详细说明对其进行了完善。


首先让我们安装python-dotenv

conda install -c conda-forge python-dotenv -n my-environment-name

然后在根目录中创建一个文件env.example,其中包含用户需要提供的值

GITHUB_ACCESS_TOKEN=PUT_YOUR_TOKEN_HERE

编辑.gitignore(我选择递归忽略任何.env

**/.env

在脚本入口点,引导文件或您认为合适的地方

from dotenv import load_dotenv
load_dotenv()

最后,现在您应该可以通过执行操作从应用程序中的任何位置访问变量

import os
print(os.getenv("GITHUB_ACCESS_TOKEN"))


注意这一点! (感谢Alex和Henrik)

  

强烈建议您这样做,因为您通常不想冒险   一些dingus覆盖gitignore并提交一个完整的文件   回购的秘密。通常,您需要让您的部署   解决方案或HashiCorp Vault Vault之类的服务可为您注入环境   var,而不是将文件存储在环境的文件系统中。

因此,请勿在生产环境中处理您的环境文件。


参考:https://github.com/theskumar/python-dotenv

我尚未尝试过的另一种可能的解决方案:https://github.com/direnv/direnv