Newsletter 365tipů můžete číst zdarma. Placené předplatné je dobrovolná podpora, která pomáhá webu pokračovat.
Podpořit 365tipů

TIP#3067: RayCast nenačítá proměnné prostředí, jak na ukládání API klíčů? A jak zjistit co Raycast v prostředí má? Co když spouštíte přímo Python?

Když Raycast spouští skripty přes „Create Script Command„, běží v omezeném prostředí shellu. Tento shell:

  • Neloaduje .zshrc, .bashrc ani jiné běžné konfigurační soubory
  • Nemá přístup k proměnným prostředí nastaveným v těchto souborech
  • Je optimalizován pro rychlost a přenositelnost, nikoli pro plné shell prostředí

Jak tedy do tohoto prostředí dostat vlastní proměnné prostředí? 

Nejelegantnějším řešením je použití souboru .zshenv, který se načítá vždy při spuštění zsh, včetně non-interactive shellu 

Prostě Vytvořte nebo editujte ~/.zshenv, třeba takto

nano ~/.zshenv

A pak do něj klasicky přidávejte vaše proměnné prostředí, tedy například API klíče

export OPENAI_API_KEY=“your_secret_key_here“
export ANOTHER_SECRET=“another_value“

Pak uložte, restartujte RayCast nebo znovu načtěte prostředí. 

Jak zjistit, co Raycast prostředí má definováno

Ve RayCastu si vytvořte následující testovací skript (stačí ho uložit tam kde máte skripty a dát Reload Script Directories. Pak najít přes Test Environment Variables a spustit. Jen pozor, že na počátku musí být zsh, aby fungovalo to co máte v ~/.zshenv  

#!/bin/zsh

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Test Environment Variables
# @raycast.mode fullOutput

echo "Testing environment variables:"
echo "PATH: $PATH"
echo "HOME: $HOME"
echo "SHELL: $SHELL"
echo "Custom API Key: $OPENAI_API_KEY"

# Test přístupu z Pythonu
python3 -c "
import os
print('\\nPython environment test:')
print(f'API Key available: {\"Yes\" if os.environ.get(\"OPENAI_API_KEY\") else \"No\"}')
"

Pokud chcete vidět komplet co je definováno, tak v první části stačí použít env – to vypíše všechny nastavené proměnné. Přidejte si to třeba za tu posloupnost echo nebo ji prostě nahraďte tím jedním příkazem. 

Jenže co když RayCast spouští přímo Python?

Špatná zpráva, tudy se vůbec zsh a jeho načtení nekoná a RayCast sám vaši proměnnou prostě nebude mít.

Dobré řešení je založit si soubor .env ve kterém přiřadíte proměnnou

OPENAI_API_KEY=tajnyklic

A ve vašem skriptu doplnit na začátek (někde tam kde máte ostatní importy)

from dotenv import load_dotenv
load_dotenv()

samozřejmě musíte přidat, pokud ho ještě nemate (pip3 install python-dotenv)

.env bude ve složce, kde je váš Python skript, takže pokud budete oddělovat skripty podle projektů do složek, tak budete mít i oddělené .env a můžete tak mít rozdílné API klíče. 

TIP:  .env je použitelné i pro konfiguraci vašeho projektu (pro váš skript)

Šlo by to ještě jinak?

MacOS umožńuje nastavovat proměnné prostředí pomoci launchctl

launchctl setenv OPENAI_API_KEY my_secret

Což je šikovné, ale hodí se jen v okamžiku, kdy máte pro všechny spouštěné věci stejné proměnné prostředí. Což zrovna u API key pro ChatGPT nemusí být – proto je lepší výše popsané .env řešení.