Portál AbcLinuxu, 12. května 2025 10:09
A já si myslím, že python je soubor a ne adresář a proto v něm nemůže být activate. A odpovídal by tomu i název okna z prvního obrázku.
Ups. Myslel jsem, že se tazatel snaží spustit soubor activate v adresáři python, ale asi se snaží příkazem acitvate spustit soubor python. To má ale asi špatně syntakticky.
1) Myslím, že python je soubor a proto v něm nemůžeš mít activate, jako by šlo o adresář.
2) Změna vlastníka: sudo chown tomas:tomas /cesta/k/tomu/co/chces/menit
venv/bin/activate
, takze ~/venv/bin/activate
- ten neexistuje.~/naucse-python/venv/bin/
a pokusis se sourcovat venv/bin/python/activate
, coz ale vzhledem k aktualnimu adresari je ~/naucse-python/venv/bin/venv/bin/python/activate
- ten neexistuje.~/naucse-python/
a zkus to znovupython/activate
../../venv/bin/python/activate
cd ~/naucse-python source venv/bin/python/activate
Zavedl jsem systém, který mám nainstalovaný na flešce a v ~/naucse-python/venv/ mám bin/ include/ lib/ lib64/ pyvenv.cfg share/ .
Podstatnější ale je, co je v ~/naucse-python/venv/bin/ . Já tam mám mnohem více souborů: activate activate.csh activate.fish easy_install easy_install-3.6 pip pip3 pip3.6 python python3 .
Tomáši
na tvém místě bych začal znovu. Drž se striktně toho co tam píší. Pokud už něco bude nainstalováno, tak ti to systém oznámí a prostě budeš jen pokračovat dál.
~/naucse-python/venv/binčo pravdepodobne znamená
/home/tomas/naucse-python/venv/bin, tak príkaz
source venv/bin/python/activateznamená, že chceš spustiť skript, ktorého celá cesta je
/home/tomas/naucse-python/venv/bin/venv/bin/python/activateNo a keď budeme mať jasno v tom, kde ten súbor vlastne je, tak treba vedieť, že v Linuxe sú buď programy skompilované alebo v podobe skriptu. Použitie "source" naznačuje, že ten tvoj program "activate" je skript. Presvedčiť sa dá tak, že sa pozrieš dovnútra. Ak je to skript, tak pravdepodobne začína znakmi
#!a za nimi nasleduje program, ktorý bude interpretovať zvyšok skriptu. Ak tam je uvedený program nesprávny (napr. s nesprávnou cestou), tak to fungovať nebude. Už nebudem ďalej špekulovať. Ujasni si kde ten súbor je, čo je v ňom napísané a podľa toho sa pohneš ďalej.
Mně připadá, že netušíš, co přesně chceš udělat. To je ale nejdůležitější první krok — ujasnit si, čeho chceš nějakými příkazy shellu docílit.
Příkaz source
je specifický pro shell (například Bash). Je zhruba stejný jako příkaz „tečka na začátku řádku“ a načte do současného shellu, ať už interaktivního nebo spuštěného se skriptem, obsah požadovaného souboru, který ale musí být taky shell skript. Těžko můžeš do shellu načíst skript v Pythonu. To řekne tak leda syntax error
.
Předpokládám tedy, že chceš spustit skript v Pythonu. Dejme tomu, že máme skript typu Hello, World v souboru /tmp/blah.py
. Takhle by se ten soubor dal vytvořit:
cat > /tmp/blah.py <<<"print('hello fucking world')"
Takhle by se dalo prohlédnout, co v něm je:
cat /tmp/blah.py
A takhle by se dal spustit:
python3 /tmp/blah.py
Nebo s úplnými cestami:
/usr/bin/python3 /tmp/blah.py
Nebo když budeš ve správném adresáři:
cd /tmp python3 blah.py
cd /tmp python3 ./blah.py
Všimni si, že na tohle^^^ vůbec nebylo potřeba, aby byl soubor spustitelný (aby měl nastavený x
bit). Spustitelný je totiž interpret Pythonu, který pak interpretuje příslušný skript v Pythonu.
Pokud chceš používat blah.py
přímo jako spustitelný soubor, k tomu slouží shebang Můžeš si přidat do souboru ten speciální první řádek nebo znovu vytvořit soubor třeba takto:
cat > /tmp/blah.py <<-BLAH #!/usr/bin/python3 print('hello fucking world') BLAH
Soubor blah.py
tedy bude obsahovat toto (cat /tmp/blah.py
):
#!/usr/bin/python3 print('hello fucking world')
Pak nastavíš, že má být spustitelný:
chmod +x /tmp/blah.py
A pak ho spustíš:
/tmp/blah.py
Nebo tedy přímo z místního adresáře:
cd /tmp ./blah.py
Je jenom potřeba si ujasnit, kde je současný adresář, kde je soubor, který chceš spustit, co v něm je (a má být) atd. atp. To je celé. Tedy neprovádět nějaký návod naslepo a s chybamí, ale vždy mít přehled o tom, co který krok dělá a znamená, jak si můžu prohlédnout výsledek nějaké akce (obsah souboru, cíl symlinku, práva souboru (ls -l
) atd.) a co vlastně dělám.
V tom tvém screenshotu používáš relativní cestu k souboru, ale první dva adresáře té relativní cesty jsou tam chybně navíc, protože to je adresář, ve kterém už jsi, který máš jako současný adresář v shellu. Pak není divu, že to celé nefunguje. (Samozřejmě tam asi budou ještě i další chyby.)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.