Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: Snufkin - 23.05.22 - klo:13.22

Otsikko: Omien ohjelmien ajaminen
Kirjoitti: Snufkin - 23.05.22 - klo:13.22
Moi!

Miten saan luotua komentorivikomennon, jolla käynnistyy tekemäni python-ohjelma? Itse ohjelma toimii oikein, kun kirjoitan siinä hakemistossa, jossa koodi on:

Koodia: [Valitse]
(...kotihakemisto)$ python3 kello.py
mutta haluaisin kirjoittaa vain

Koodia: [Valitse]
$ kello
jolloin järjestelmä ymmärtää sen komennoksi ja käynnistää ohjelman 'kello.py'. Pitääkö tuohon luoda joku skripti, vai miten homma toimii?

Minulla on kotihakemistossa 'bin' kansio, joka lisätty käynnistyspolkuun, eli esim. käännetyt c-ohjelmat lähtevät käyntiin ihan pelkällä tiedoston nimellä kaikkialta hakemistopuusta. Nyt pitäisi saada sama systeemi Python-ohjelmille.

Otsikko: Vs: Omien ohjelmien ajaminen
Kirjoitti: nm - 23.05.22 - klo:13.27
Minulla on kotihakemistossa 'bin' kansio, joka lisätty käynnistyspolkuun, eli esim. käännetyt c-ohjelmat lähtevät käyntiin ihan pelkällä tiedoston nimellä kaikkialta hakemistopuusta. Nyt pitäisi saada sama systeemi Python-ohjelmille.

Jos se on yksittäinen Python-skripti, joka ei vaadi seurakseen muita ohjelmatiedostoja (moduuleja), voit kopioida tiedoston sinne ~/bin -hakemistoon nimellä kello, eli .py-päätteen voi jättää pois. Jos tiedostossa ei vielä ole shebang-riviä, lisää se tiedoston ensimmäiselle riville:

Koodia: [Valitse]
#!/usr/bin/env python3
Aseta tiedosto vielä suoritettavaksi:

Koodia: [Valitse]
chmod a+x ~/bin/kello

Laajemman moduuleista koostuvan python-sovelluksen asentamiseen kannattaa käyttää setuptoolsia: https://packaging.python.org/en/latest/tutorials/packaging-projects/
Sillä voi rakentaa projektista wheel-tiedoston, joka on asennettavissa pipillä suoraan tiedostosta tai julkisen PyPi-repositorion kautta.
Otsikko: Vs: Omien ohjelmien ajaminen
Kirjoitti: Snufkin - 23.05.22 - klo:15.17

Jos se on yksittäinen Python-skripti, joka ei vaadi seurakseen muita ohjelmatiedostoja (moduuleja), voit kopioida tiedoston sinne ~/bin -hakemistoon nimellä kello, eli .py-päätteen voi jättää pois. Jos tiedostossa ei vielä ole shebang-riviä, lisää se tiedoston ensimmäiselle riville:

Koodia: [Valitse]
#!/usr/bin/env python3
Aseta tiedosto vielä suoritettavaksi:

Koodia: [Valitse]
chmod a+x ~/bin/kello

Laajemman moduuleista koostuvan python-sovelluksen asentamiseen kannattaa käyttää setuptoolsia: https://packaging.python.org/en/latest/tutorials/packaging-projects/
Sillä voi rakentaa projektista wheel-tiedoston, joka on asennettavissa pipillä suoraan tiedostosta tai julkisen PyPi-repositorion kautta.

Kiitos neuvoista, näillä onnistui. Toistaiseksi nämä ohjelmani mahtuvat yhteen tiedostoon.

Jos haluan käyttää jotain tallennustiedostoja ohjelmissani ja tuo skripti on tuolla bin-kansiossa, niin teenko koodiin vain sopivat hakemistopolut tiedostojen eteen vai miten se homma hoituu?

Vai onko fiksumpi laittaa kaikki (skripti + tallennukset) omaan kansioonsa lisätä se kansio tuonne PATH-muuttujaan?

Otsikko: Vs: Omien ohjelmien ajaminen
Kirjoitti: kamara - 23.05.22 - klo:16.01
Jos käyttäisin monia python tiedostoja, niin Itse tekisin bash-scriptin pythonohjelmapuun käynnistämiseen.

Eli ...
nano ~/bin/ohjelma
Koodia: [Valitse]
#!/usr/bin/bash
cd pythonohjelmaan
python3 pythonohjelma.py
chmod 755 ~/bin/ohjelma
Otsikko: Vs: Omien ohjelmien ajaminen
Kirjoitti: nm - 23.05.22 - klo:19.55
Jos haluan käyttää jotain tallennustiedostoja ohjelmissani ja tuo skripti on tuolla bin-kansiossa, niin teenko koodiin vain sopivat hakemistopolut tiedostojen eteen vai miten se homma hoituu?

Mielestäni kannattaa määritellä skriptin alussa muuttuja datakansiolle, ja käyttää sitten sitä muualla skriptissä tiedostoihin viitatessa.

Datakansio voi olla tarpeesta riippuen käyttäjän kotihakemiston alla sijaitseva .local/share/omaohjelma, tai vaikka ~/omadata. Skriptissä voi myös tarkistaa, että kyseinen kansio on olemassa ja tarvittaessa luoda se automaattisesti.
Otsikko: Vs: Omien ohjelmien ajaminen
Kirjoitti: Snufkin - 24.05.22 - klo:11.03
Keksin toisenkin tavan tähän ongelmaan. Antaa olla ohjelmien omissa kansioissaan ja määrittelee aliaksella tuon komennon.

$
Koodia: [Valitse]
alias kello='python3 ~/...polku.../kello.py'
Otsikko: Vs: Omien ohjelmien ajaminen
Kirjoitti: nm - 24.05.22 - klo:12.18
Keksin toisenkin tavan tähän ongelmaan. Antaa olla ohjelmien omissa kansioissaan ja määrittelee aliaksella tuon komennon.

$
Koodia: [Valitse]
alias kello='python3 ~/...polku.../kello.py'

Joo, toimiihan tuokin. Huomaa kuitenkin, että työhakemisto on se, jossa komentotulkki sattuu olemaan silloin, kun käyttäjä ajaa tuon kello-komennon. Kiinteät datahakemistot täytyy siis joka tapauksessa määritellä absoluuttisilla poluilla tai vaihtoehtoisesti suhteessa skriptin sijaintiin, jonka saa ajon aikana muuttujasta __file__: https://stackoverflow.com/a/9350788
Otsikko: Vs: Omien ohjelmien ajaminen
Kirjoitti: Snufkin - 24.05.22 - klo:12.49
Keksin toisenkin tavan tähän ongelmaan. Antaa olla ohjelmien omissa kansioissaan ja määrittelee aliaksella tuon komennon.

$
Koodia: [Valitse]
alias kello='python3 ~/...polku.../kello.py'

Joo, toimiihan tuokin. Huomaa kuitenkin, että työhakemisto on se, jossa komentotulkki sattuu olemaan silloin, kun käyttäjä ajaa tuon kello-komennon. Kiinteät datahakemistot täytyy siis joka tapauksessa määritellä absoluuttisilla poluilla tai vaihtoehtoisesti suhteessa skriptin sijaintiin, jonka saa ajon aikana muuttujasta __file__: https://stackoverflow.com/a/9350788

Eikö ne datatiedostot voi olla samassa kansiossa kuin se skripti? Silloin ei tarvitse mitään polkuja koodiin, pelkkä tiedostonimi riittää.

Otsikko: Vs: Omien ohjelmien ajaminen
Kirjoitti: Snufkin - 24.05.22 - klo:12.55
Jos käyttäisin monia python tiedostoja, niin Itse tekisin bash-scriptin pythonohjelmapuun käynnistämiseen.

Koodia: [Valitse]
#!/usr/bin/bash
cd pythonohjelmaan
python3 pythonohjelma.py

Eikö tuo alias tee saman asian helpommin?
Otsikko: Vs: Omien ohjelmien ajaminen
Kirjoitti: kamara - 24.05.22 - klo:15.08
Jos käyttäisin monia python tiedostoja, niin Itse tekisin bash-scriptin pythonohjelmapuun käynnistämiseen.

Koodia: [Valitse]
#!/usr/bin/bash
cd pythonohjelmaan
python3 pythonohjelma.py

Eikö tuo alias tee saman asian helpommin?

Se ei ole aivan sama asia...

... scriptiin voi mm. tehdä symbolisen linkin ja/tai käynnistyskuvakkeen työpöydälle.
Otsikko: Vs: Omien ohjelmien ajaminen
Kirjoitti: nm - 24.05.22 - klo:16.07
Keksin toisenkin tavan tähän ongelmaan. Antaa olla ohjelmien omissa kansioissaan ja määrittelee aliaksella tuon komennon.

$
Koodia: [Valitse]
alias kello='python3 ~/...polku.../kello.py'

Joo, toimiihan tuokin. Huomaa kuitenkin, että työhakemisto on se, jossa komentotulkki sattuu olemaan silloin, kun käyttäjä ajaa tuon kello-komennon. Kiinteät datahakemistot täytyy siis joka tapauksessa määritellä absoluuttisilla poluilla tai vaihtoehtoisesti suhteessa skriptin sijaintiin, jonka saa ajon aikana muuttujasta __file__: https://stackoverflow.com/a/9350788

Eikö ne datatiedostot voi olla samassa kansiossa kuin se skripti? Silloin ei tarvitse mitään polkuja koodiin, pelkkä tiedostonimi riittää.

Data voi olla samassa kansiossa kuin skripti, mutta koodissa ei riitä pelkkä tiedostonimi, jos skriptiä ajetaan jossain muualla kuin skriptin kansiossa. Kokeile niin näet mitä tapahtuu.  :)
Otsikko: Vs: Omien ohjelmien ajaminen
Kirjoitti: _Pete_ - 25.05.22 - klo:08.38

Eikö ne datatiedostot voi olla samassa kansiossa kuin se skripti? Silloin ei tarvitse mitään polkuja koodiin, pelkkä tiedostonimi riittää.

Jokaisella prosessilla on olemassa current work dir, joka voi olla eri riippuen mistä/miten prosessi käynnistää. Sen takia suhteelliset
tiedostoviittaukset voivat osoittaa eri paikkaan.

https://www.baeldung.com/linux/find-working-directory-of-running-process