Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: JA5U - 26.02.19 - klo:11.40
-
Hei
En nyt pääse kartalle, että mitä Pythonia ajetaan missäkin vaiheessa.
Jos ajan python --version, niin saan vastauksen Python 3.7.1
/usr/bin/python --version palauttaa Python 2.7.15rc1
ja mitä tuolla uss/bin/ yleisesti ottaen on?
Jos ajan esim. python manage.py runserver (django sovellus), niin se ei toimi vaan kaatuu siihen, ettei Djangoa löydy.
Django paketin sekä muut olen asentanut python -m pip install ...
Käyttääkö tuo python komento kaikesta huolimatta tuota 2.7.15rc1 vaikka --version palauttaakin 3.7.1?
Vai vaihtuuko python jotenkin lennosta, kun kutsutaan python manage.py runserver?
Ja ettei olis liian helppoa, niin onko nämä edes asennettu oikein, kun aina pitää olla sudottamassa ja antamassa salasanaa, kun asentaa pipillä..
EDIT: Ja miksi mikä tahansa siansaksa, mitä kirjoitan komentoriville, yritetään tulkita Pythonin välityksellä?
~$ asdasdasd
Failed to import the site module
Traceback (most recent call last):
File "/usr/lib/python3.7/site.py", line 596, in <module>
main()
File "/usr/lib/python3.7/site.py", line 583, in main
known_paths = addsitepackages(known_paths)
File "/usr/lib/python3.7/site.py", line 366, in addsitepackages
addsitedir(sitedir, known_paths)
File "/usr/lib/python3.7/site.py", line 213, in addsitedir
addpackage(sitedir, name, known_paths)
File "/usr/lib/python3.7/site.py", line 165, in addpackage
f = open(fullname, "r")
File "/usr/lib/python3.7/_bootlocale.py", line 35, in getpreferredencoding
if sys.flags.utf8_mode:
AttributeError: 'sys.flags' object has no attribute 'utf8_mode'
-
Kannattaa käyttää eksplisiittisesti python2 ja python3 -komentoja sen mukaan kumpaa versiota haluat käyttää.
Yleensä python-komento ilman tuota versionumeroa suorittaa python2:n, mutta sinulla on erikseen asennettu Python 3.7.1, joka vielä sotkee asiaa lisää. Tarvitsetko sen välttämättä, vai riittäisikö Ubuntun tarjoama Python 3 (18.04:ssä se on 3.6.7)?
Ja ettei olis liian helppoa, niin onko nämä edes asennettu oikein, kun aina pitää olla sudottamassa ja antamassa salasanaa, kun asentaa pipillä..
Niin se menee, jos haluat asentaa järjestelmätason paketteja tai palveluja. Suosittelisin tuollaisten djangon tapaisten monimutkaisten kokonaisuuksien asentamiseen ja käyttöön Dockeria, jolloin versiot voi määritellä vapaasti ja tarkasti riippumatta isäntäjärjestelmän Pythonista ja muista moduuleista. Täällä eräs esimerkki: https://docs.docker.com/compose/django/
EDIT: Ja miksi mikä tahansa siansaksa, mitä kirjoitan komentoriville, yritetään tulkita Pythonin välityksellä?
~$ asdasdasd
Failed to import the site module
Traceback (most recent call last):
File "/usr/lib/python3.7/site.py", line 596, in <module>
main()
File "/usr/lib/python3.7/site.py", line 583, in main
known_paths = addsitepackages(known_paths)
File "/usr/lib/python3.7/site.py", line 366, in addsitepackages
addsitedir(sitedir, known_paths)
File "/usr/lib/python3.7/site.py", line 213, in addsitedir
addpackage(sitedir, name, known_paths)
File "/usr/lib/python3.7/site.py", line 165, in addpackage
f = open(fullname, "r")
File "/usr/lib/python3.7/_bootlocale.py", line 35, in getpreferredencoding
if sys.flags.utf8_mode:
AttributeError: 'sys.flags' object has no attribute 'utf8_mode'
Tuokin liittyy asentamaasi Python 3.7:ään. Kun suoritat komennon, jota komentotulkki ei tunnista, ja jota ei löydy PATH-muuttujassa määritellyistä poluista, Ubuntu yrittää tarkistaa, mistä asentamattomasta paketista sellainen ohjelma löytyisi. Tämä epäonnistuu, koska skripti on tarkoitettu suoritettavaksi järjestelmän omalla Pythonilla eikä tuolla 3.7.1:llä. Luultavasti muitakin järjestelmän keskeisiä toimintoja on tällä hetkellä rikki samasta syystä.
-
Kannattaa käyttää eksplisiittisesti python2 ja python3 -komentoja sen mukaan kumpaa versiota haluat käyttää.
Yleensä python-komento ilman tuota versionumeroa suorittaa python2:n, mutta sinulla on erikseen asennettu Python 3.7.1, joka vielä sotkee asiaa lisää. Tarvitsetko sen välttämättä, vai riittäisikö Ubuntun tarjoama Python 3 (18.04:ssä se on 3.6.7)?
Ja ettei olis liian helppoa, niin onko nämä edes asennettu oikein, kun aina pitää olla sudottamassa ja antamassa salasanaa, kun asentaa pipillä..
Niin se menee, jos haluat asentaa järjestelmätason paketteja tai palveluja. Suosittelisin tuollaisten djangon tapaisten monimutkaisten kokonaisuuksien asentamiseen ja käyttöön Dockeria, jolloin versiot voi määritellä vapaasti ja tarkasti riippumatta isäntäjärjestelmän Pythonista ja muista moduuleista. Täällä eräs esimerkki: https://docs.docker.com/compose/django/
EDIT: Ja miksi mikä tahansa siansaksa, mitä kirjoitan komentoriville, yritetään tulkita Pythonin välityksellä?
~$ asdasdasd
Failed to import the site module
Traceback (most recent call last):
File "/usr/lib/python3.7/site.py", line 596, in <module>
main()
File "/usr/lib/python3.7/site.py", line 583, in main
known_paths = addsitepackages(known_paths)
File "/usr/lib/python3.7/site.py", line 366, in addsitepackages
addsitedir(sitedir, known_paths)
File "/usr/lib/python3.7/site.py", line 213, in addsitedir
addpackage(sitedir, name, known_paths)
File "/usr/lib/python3.7/site.py", line 165, in addpackage
f = open(fullname, "r")
File "/usr/lib/python3.7/_bootlocale.py", line 35, in getpreferredencoding
if sys.flags.utf8_mode:
AttributeError: 'sys.flags' object has no attribute 'utf8_mode'
Tuokin liittyy asentamaasi Python 3.7:ään. Kun suoritat komennon, jota komentotulkki ei tunnista, ja jota ei löydy PATH-muuttujassa määritellyistä poluista, Ubuntu yrittää tarkistaa, mistä asentamattomasta paketista sellainen ohjelma löytyisi. Tämä epäonnistuu, koska skripti on tarkoitettu suoritettavaksi järjestelmän omalla Pythonilla eikä tuolla 3.7.1:llä. Luultavasti muitakin järjestelmän keskeisiä toimintoja on tällä hetkellä rikki samasta syystä.
Eikö tuota Dockeria vastaavaa toiminnallisuutta varten ole virtualenvit?
Ja jos PIPiä käyttää virtualenvissä, niin silloin ei tarvitse sudotella?
EDIT: Ja vielä jäi epäselväksi, että miten se Pythonista käytettävä versio määrittyy? Miksi siis python --version palauttaa 3.7.1, mutta manage.py ei ilmeisesti käytä enää sitä vaikka kutsu onkin ihan sama python manage.py ...
Ja huomasin myös, etten voi käyttää esim. python3, koska
$python3
Failed to import the site module
Traceback (most recent call last):
Tässä vielä "kokonaisuus" ::)
$ ls -ltra /usr/bin/python*
-rwxr-xr-x 2 root root 4464400 marra 28 2017 /usr/bin/python3.5m
-rwxr-xr-x 2 root root 4464400 marra 28 2017 /usr/bin/python3.5
-rwxr-xr-x 1 root root 306 maali 6 2018 /usr/bin/pythontex3
lrwxrwxrwx 1 root root 58 maali 6 2018 /usr/bin/pythontex -> ../share/texlive/texmf-dist/scripts/pythontex/pythontex.py
lrwxrwxrwx 1 root root 16 huhti 16 2018 /usr/bin/python-config -> python2.7-config
lrwxrwxrwx 1 root root 16 huhti 16 2018 /usr/bin/python2-config -> python2.7-config
lrwxrwxrwx 1 root root 9 huhti 16 2018 /usr/bin/python2 -> python2.7
lrwxrwxrwx 1 root root 9 huhti 16 2018 /usr/bin/python -> python2.7
-rwxr-xr-x 2 root root 4857312 loka 22 14:21 /usr/bin/python3.7m
-rwxr-xr-x 2 root root 4857312 loka 22 14:21 /usr/bin/python3.7
lrwxrwxrwx 1 root root 34 loka 22 14:32 /usr/bin/python3.6m-config -> x86_64-linux-gnu-python3.6m-config
-rwxr-xr-x 2 root root 4522328 loka 22 14:32 /usr/bin/python3.6m
lrwxrwxrwx 1 root root 33 loka 22 14:32 /usr/bin/python3.6-config -> x86_64-linux-gnu-python3.6-config
-rwxr-xr-x 2 root root 4522328 loka 22 14:32 /usr/bin/python3.6
lrwxrwxrwx 1 root root 17 loka 25 14:11 /usr/bin/python3m-config -> python3.6m-config
lrwxrwxrwx 1 root root 10 loka 25 14:11 /usr/bin/python3m -> python3.6m
lrwxrwxrwx 1 root root 16 loka 25 14:11 /usr/bin/python3-config -> python3.6-config
lrwxrwxrwx 1 root root 9 loka 25 14:11 /usr/bin/python3 -> python3.6
lrwxrwxrwx 1 root root 33 marra 12 16:31 /usr/bin/python2.7-config -> x86_64-linux-gnu-python2.7-config
-rwxr-xr-x 1 root root 3670448 marra 12 16:31 /usr/bin/python2.7
-
Kokeile komentoa:
which python
Tuolla näkee, ettei ”python” ainakaan mikään skriptiä tai aliasta kutsu.
Ensimmäisen viestin perusteella epäilin alternatives-järjestelmää, mutta *buntu ei näy käyttävän sitä Python-versioiden ohjailuun.
Suhteellisen puhtaassa Ubuntu 18.04 -virtuaaliasennuksessani on muuten pelkästään Python3, versio 3.6.7. Komento ”python” ei edes toimi. Ilmeisesti olet joka tapauksessa asennellut noita muita versioita?
-
Eikö tuota Dockeria vastaavaa toiminnallisuutta varten ole virtualenvit?
No jossain määrin kyllä, mutta virtualenviin vaikuttaa alla oleva järjestelmä natiivien kirjastojen osalta. Dockerilla taas paketoidaan tai kontitetaan ihan koko ajoympäristö kerneliä lukuun ottamatta, jolloin natiiveja kirjastoja ja muita ulkoisia riippuvuuksia ei tarvitse asentaa isäntäjärjestelmän puolelle.
Imagen rakennusskriptin (Dockerfile) ja base imagen avulla voidaan tarkasti määrittää millaisessa ympäristössä ohjelmaa ajetaan ja ratkaista mahdolliset sisäiset riippuvuusongelmat ilman että isäntäjärjestelmään tarvitsee koskea mitenkään. Dockerin avulla on helppoa vaihtaa vaikkapa Djangon versio rikkomatta tuotantojärjestelmää asennuksen aikana, siirtää asennus toiselle koneelle tai ajaa rinnakkain eri versioita tuotanto- ja testikäytössä.
Sinulla on Python 3.7.1 asennettu järjestelmään eikä venviin, ja se sotkee nyt koko Ubuntun toimintaa.
Ja jos PIPiä käyttää virtualenvissä, niin silloin ei tarvitse sudotella?
Juu
EDIT: Ja vielä jäi epäselväksi, että miten se Pythonista käytettävä versio määrittyy? Miksi siis python --version palauttaa 3.7.1, mutta manage.py ei ilmeisesti käytä enää sitä vaikka kutsu onkin ihan sama python manage.py ...
python-komennon linkittyminen python 3.7.1:een on kyllä outoa, eikä selity suoraan /usr/bin-hakemiston linkeillä. Ilmeisesti symbolinen linkki on jossain muualla, ja tosiaan which python -komennolla voi selvitellä lisää.
Ja huomasin myös, etten voi käyttää esim. python3, koska
$python3
Failed to import the site module
Traceback (most recent call last):
Tuokin liittyy jotenkin Python 3.7.1:n aiheuttamaan sotkuun. Järjestelmän python3.6 on nähtävästi kokonaan rikki.
-
Kokeile komentoa:
which python
Tuolla näkee, ettei ”python” ainakaan mikään skriptiä tai aliasta kutsu.
Ensimmäisen viestin perusteella epäilin alternatives-järjestelmää, mutta *buntu ei näy käyttävän sitä Python-versioiden ohjailuun.
Suhteellisen puhtaassa Ubuntu 18.04 -virtuaaliasennuksessani on muuten pelkästään Python3, versio 3.6.7. Komento ”python” ei edes toimi. Ilmeisesti olet joka tapauksessa asennellut noita muita versioita?
$ which python
/usr/bin/python
Ja olen tosiaan joskus asentanut jonkun version ::)
Jotain pikkuvikaa on koitettu korjata isommalla paikalla...
-
Tämäkin ihan mieleenkiintoinen:
$ /usr/bin/python2.7
File "/usr/lib/python3.7/site.py", line 183
file=sys.stderr)
^
SyntaxError: invalid syntax
-
Tämäkin ihan mieleenkiintoinen:
$ /usr/bin/python2.7
File "/usr/lib/python3.7/site.py", line 183
Joo, hyvin outoa. Joka tapauksessa se python 3.7.1-asennus kannattanee poistaa kokonaan. Python 2.7:n voi myös poistaa, jos kyseessä on Ubuntu 18.04, ellet itse välttämättä tarvitse sitä. Ubuntun Python 3.6:n keskeiset paketit olisi ehkä hyvä asentaa uudelleen poistojen jälkeen:
sudo apt install --reinstall python3 python3.6 python3.6-minimal
-
Tämäkin ihan mieleenkiintoinen:
$ /usr/bin/python2.7
File "/usr/lib/python3.7/site.py", line 183
file=sys.stderr)
^
SyntaxError: invalid syntax
Ei oikeastaan, jos kerran Python 2 yrittää tuota suorittaa: siinä oli vielä >-syntaksi tuommoisia varten.
-
Tämäkin ihan mieleenkiintoinen:
$ /usr/bin/python2.7
File "/usr/lib/python3.7/site.py", line 183
file=sys.stderr)
^
SyntaxError: invalid syntax
Mutta miksi python2.7 yrittää käyttää python3.7:n ympäristöä?
-
No nyt "asentelin hieman uusiksi" poistamalla ja asentamalla Pythonin. Katosi samalla kaikki DE:t paitsi XFCE.
Tai ainakaan niitä ei voinut valita kirjautuimisikkunassa eikä sessioista ole (tosin, ehkä sellainen pitää käynnistää?)
EDIT: Ja Nodekin oli mennyt siinä samalla...mitähän kaikkea sitä tuli poistettua.
Ja tässä vielä itse ongelman eli Python osalta asennusten jälkeen:
$ python
bash: /usr/bin/python3.7: No such file or directory
$ which python
/usr/bin/python
$ ls -ltra /usr/bin/python*
lrwxrwxrwx 1 root root 16 huhti 16 2018 /usr/bin/python-config -> python2.7-config
lrwxrwxrwx 1 root root 16 huhti 16 2018 /usr/bin/python2-config -> python2.7-config
lrwxrwxrwx 1 root root 9 huhti 16 2018 /usr/bin/python2 -> python2.7
lrwxrwxrwx 1 root root 9 huhti 16 2018 /usr/bin/python -> python2.7
lrwxrwxrwx 1 root root 34 loka 22 14:32 /usr/bin/python3.6m-config -> x86_64-linux-gnu-python3.6m-config
-rwxr-xr-x 2 root root 4522328 loka 22 14:32 /usr/bin/python3.6m
lrwxrwxrwx 1 root root 33 loka 22 14:32 /usr/bin/python3.6-config -> x86_64-linux-gnu-python3.6-config
-rwxr-xr-x 2 root root 4522328 loka 22 14:32 /usr/bin/python3.6
lrwxrwxrwx 1 root root 17 loka 25 14:11 /usr/bin/python3m-config -> python3.6m-config
lrwxrwxrwx 1 root root 10 loka 25 14:11 /usr/bin/python3m -> python3.6m
lrwxrwxrwx 1 root root 16 loka 25 14:11 /usr/bin/python3-config -> python3.6-config
lrwxrwxrwx 1 root root 9 loka 25 14:11 /usr/bin/python3 -> python3.6
lrwxrwxrwx 1 root root 33 marra 12 16:31 /usr/bin/python2.7-config -> x86_64-linux-gnu-python2.7-config
-rwxr-xr-x 1 root root 3670448 marra 12 16:31 /usr/bin/python2.7
-
$ python
bash: /usr/bin/python3.7: No such file or directory
Tarkista, ettei .bashrc:ssä ole asetettu aliasta python -> python3.7
-
$ python
bash: /usr/bin/python3.7: No such file or directory
Tarkista, ettei .bashrc:ssä ole asetettu aliasta python -> python3.7
No siellähän se:
alias python="/usr/bin/python3.7"
Poistin ja edelleen se on:
$python --version
Python 2.7.15rc1
Ja dpkg listaus on nyt ihan tynkä:
dpkg -l python
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==================================-======================-======================-==========================================================================
ii python 2.7.15~rc1-1 amd64 interactive high-level object-oriented language (default version)
Ei tästä kyllä ota tolkkua...
-
Poistin ja edelleen se on:
$python --version
Python 2.7.15rc1
Nyt se on oikein, eli python-komento viittaa python2.7:ään, kuten pitääkin.
Ja dpkg listaus on nyt ihan tynkä:
dpkg -l python
Niin tuo listaa vain kyseisen paketin tiedot. Jos haluat listata kaikki paketit, joiden nimessä on merkkijono "python", voit vaikka grepata dpkg -l:n listausta:
dpkg -l | grep python
-
Pelkkä aliaksen poistaminen .bashrc -tiedostosta ei riitä vaan pitää joko kirjautua ulos ja takaisin sisään tai komentaa:
source ~/.bashrc
-
Pelkkä aliaksen poistaminen .bashrc -tiedostosta ei riitä vaan pitää joko kirjautua ulos ja takaisin sisään tai komentaa:
source ~/.bashrc
source ei kyllä poista olemassa olevia aliaksia, koska se vain lukee tuon tiedoston ja siellä ei käsketä unohtamaan vanhoja aliaksia. Toisaalta uloskirjautuminenkaan ei tässä tapauksessa ole tarpeen. Pääte-emulaattorin käynnistäminen uudestaan pitäisi riittää.
-
Riittää pelkkä:
$ exec bash
Poistin ja edelleen se on:
$python --version
Python 2.7.15rc1
Nyt se on oikein, eli python-komento viittaa python2.7:ään, kuten pitääkin.
Ja dpkg listaus on nyt ihan tynkä:
dpkg -l python
Niin tuo listaa vain kyseisen paketin tiedot. Jos haluat listata kaikki paketit, joiden nimessä on merkkijono "python", voit vaikka grepata dpkg -l:n listausta:
dpkg -l | grep python
Joo se oli mun moka ja jäi * perästä.
Ja on se nyt merkittävästi suppeampi, mutta en ymmärrä, että miksi se väkisellä asentaa myös 2.7
-
Ja on se nyt merkittävästi suppeampi, mutta en ymmärrä, että miksi se väkisellä asentaa myös 2.7
Sinulla on varmaankin asennettuna sovelluksia, jotka tarvitsevat Python 2.7:n.
-
Ja on se nyt merkittävästi suppeampi, mutta en ymmärrä, että miksi se väkisellä asentaa myös 2.7
Sinulla on varmaankin asennettuna sovelluksia, jotka tarvitsevat Python 2.7:n.
Voipi olla. Nyt ainakin Django appsi käy ja kukkuu, joten ongelma on toistaiseksi ratkaistu.
Käytän nyt tuota python3 ja pip3 komentoja. Dockerien julkaisemiseen pitäsi perehtyä, että uskaltaa lähteä sille tielle.
Ehkä onnistun dockeroimaan sitten, kun proggis on valmis lastattavaksi.
-
Ei mahtunut merkkimäärän puolesta tähän
$ dpkg -l pytho*
|
Löysin kuitenkin em. kommentin innoittamana seuraavan ohjeen:
https://medium.com/zeitcode/a-simple-recipe-for-django-development-in-docker-bonus-testing-with-selenium-6a038ec19ba5
Luultavasti palaan asiaan, kun en tiedä tuosta yhtään mitään, mutta kovasti tuo lupailee toimivaa ratkaisua.
Miten tuommosen dockerin (verkkopalvelu) vie tuotantoon eli mistä ja minkälainen hostingin? Pakko ottaa joku VPS?