我正在研究一组使用.env文件进行配置的项目,其中每个.env文件都会导出许多环境变量。文件设置如;
{{1}}
我为此使用了很多Windows Linux子系统,但我也希望能够在我的Windows机器上运行这些项目。有问题的项目是Golang。
有没有简单的方法以编程方式从这些.env文件中设置Windows环境变量(最好是暂时的)?这些主要是因为我可以在VSCode中进行调试。
答案 0 :(得分:1)
我使用了godotenv库。
将配置值添加到项目根目录下的 .env 文件中:
PORT=8080
NAME=FlowAPI
main.go
package main
import (
"log"
"github.com/joho/godotenv"
"fmt"
"os"
)
func init() {
// loads values from .env into the system
if err := godotenv.Load(); err != nil {
log.Print("No .env file found")
}
}
func main() {
// Get the PORT environment variable
port, exists := os.LookupEnv("PORT")
if exists {
fmt.Println(port)
}
}
答案 1 :(得分:0)
import "os" func Clearenv() func Environ() []string func Expand(s string, mapping func(string) string) string func ExpandEnv(s string) string func Getenv(key string) string func Setenv(key, value string) error func Unsetenv(key string) error
使用bufio.Scanner
读取env文件行。使用strings
包解析行。使用os
包环境变量函数。
例如,
package main
import (
"bufio"
"bytes"
"fmt"
"io"
"os"
"strings"
)
func parseLine(line string) (key, value string) {
line = strings.TrimSpace(line)
const export = `export `
if !strings.HasPrefix(line, export) {
return "", ""
}
line = strings.TrimPrefix(line, export)
fields := strings.SplitN(line, "=", 2)
if len(fields) > 0 {
key = strings.TrimSpace(fields[0])
if len(fields) > 1 {
value = strings.TrimSpace(fields[1])
}
}
return key, value
}
func setenv(r io.Reader) error {
s := bufio.NewScanner(r)
for s.Scan() {
line := s.Text()
key, value := parseLine(line)
if len(key) < 1 {
continue
}
err := os.Setenv(key, value)
if err != nil {
return err
}
}
if err := s.Err(); err != nil {
return err
}
return nil
}
func main() {
envFile := bytes.NewBufferString(
"export VARIABLE1=foo\r\nexport VARIABLE2=bar\n",
)
err := setenv(envFile)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
for _, key := range []string{`VARIABLE1`, `VARIABLE2`} {
env, found := os.LookupEnv(key)
fmt.Println(key, found, env)
}
}
游乐场:https://play.golang.org/p/pZKQ0GW5eCu
输出:
VARIABLE1 true foo
VARIABLE2 true bar
答案 2 :(得分:0)
创建一个名为“.env”的文本文件(您实际上可以将其命名为任何我猜想的东西,但这使它变得简短且具有描述性)。将此文件放在您选择的任何文件夹中……远离您可能公开的任何 Python 代码,例如GitHub、GitLab 等。例如我的位于“E:/Python/EnvironmentVariables/.env”。
在您喜欢的文本编辑器中编辑文件,并创建您的机密。如果您愿意,您可以将所有项目的所有秘密都放在这个文件中,[标题] 是可选的,仅供您使用。确保所有键名都不同 - 如果需要,将项目名称添加到开头或结尾:
[MyProject]
MyUsername="Fred Bloggs"
MyEmail="fred@example.com"
MyPassword="fvghtyu7i890ol"
[MyOtherProject]
MyAPIKey_MyOtherProject="FMu4ejyK-qQLBasTs7iHx*SFN5fF"
email_port=110
DEBUG=True
现在在您的 Python 程序中执行此操作,以便在任何项目中访问您想要的任何秘密!
import os
from dotenv import load_dotenv
load_dotenv("E:/Python/EnvironmentVariables/.env")
USER_NAME = os.getenv("MyUsername")
API_KEY = os.getenv("MyAPIKey_MyOtherProject")
print(USER_NAME, API_KEY)