代码之家  ›  专栏  ›  技术社区  ›  ajthinking

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

  •  4
  • ajthinking  · 技术社区  · 7 年前

    通过运行 conda env export > environment.yml 我可以让人们更容易地克隆和复制我的环境。

    .env 文件(被git忽略),用户可以在其中放置帐户详细信息、密码、令牌等文件 .env.example 已提供,允许用户查看所需的值。所以我用一个python类实现了这一点,但在r/learnpython中,它是不受欢迎的(“…给你的用户一根绳子来吊死自己”)。

    activate 在我的项目根目录中

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

    所以用户现在只是运行 source activate

    • 激活 如果已提交,如何保护用户不意外发布此信息?
    • GITHUB_ACCESS_TOKEN 他仍然很活跃。我希望conda环境保留一组单独的环境变量?
    • 用户必须在每次重新启动终端时运行激活脚本
    • 激活脚本不支持windows使用
    • 原理仍然与PHP中的.env.example相同,这很糟糕??

    总而言之,我想要一种干净、简单的方法来存储依赖项和可定制的环境变量,允许conda用户进行简单的安装,如果可能的话,也允许更广泛的python用户。这里有哪些好的做法?我可以在environment.yml中列出变量吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Strom    7 年前

    我更喜欢你原来的解决方案。只要自述文件和注释中有足够的警告,就忽略“rope”参数。不可能建立一个傻瓜式的系统。如果需要检查,请添加一个环境变量,以防止默认环境按原样运行。这将确保环境已被修改以供使用,或者至少用户必须查看该文件。

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

        2
  •  0
  •   ajthinking    7 年前

    比如@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"))
    


    强烈建议不要这样做,因为你通常不想冒险 有些人要求我们重写gitignore并提交一个充满 你回购的秘密。通常,您希望让您的部署 解决方案或类似HashiCorp Vault handle的服务注入您的环境 vars,而不是在环境的文件系统上存储文件。

    因此,不要在生产中乱搞环境文件。


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

    https://github.com/direnv/direnv