[Centos6.4] pip install python versie

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • amx
  • Registratie: December 2007
  • Laatst online: 07:54
Ik probeer Django te installeren middels de source code

Om Django te installeren wordt op de ontwikkelaarswebsite aangeraden om pip te gebruiken.
Centos 6.4 heeft standaard Python 2.6.6 en deze wordt niet ondersteund door Django.
Ik heb dus Python 3.5.1 geinstalleerd.
Ook heb ik Pip3 en Pip3.5 geinstalleerd.

Ik heb een virtualenv gemaakt.
In deze virtualenv staat een configuratiebestand pyenv.cfg, waar wordt verwezen naar Python 3.5.1.
Ook in de bin map in de virtualenv wordt verwezen naar Python3.

Echter wanneer ik probeer Django te installeren, krijg ik een foutmelding:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6
Processing /home/amx/Downloads/django-master
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-RpLyFx-build/setup.py", line 32, in <module>
        version = __import__('django').get_version()
      File "django/__init__.py", line 3, in <module>
        from django.utils.version import get_version
      File "django/utils/version.py", line 7, in <module>
        from django.utils.lru_cache import lru_cache
      File "django/utils/lru_cache.py", line 28
        fasttypes = {int, str, frozenset, type(None)},
                        ^
    SyntaxError: invalid syntax

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-RpLyFx-build


Deze melding toont dat Pip nog steeds Python2 aanroept.
Ook heb ik gegoogled naar de foutmelding. De exacte foutcode vind ik terug op verschillende sites en wijzen erop dat de versie van Python onjuist is.

Ook wanneer ik specifiek aangeef dat Django geinstalleerd moet worden met Pip3 blijft deze foutmeling terugkomen.

Ik heb gezocht of er ergens een omgevingsvariabele is die verwijst naar Python2 in bijvoorbeeld bash_profile, maar ik vind vooralsnog niks.

Als ik
code:
1
pip3 show python


uitvoer, krijg ik als resultaat dat de versie 2.6.6 is.

Kortom, ik probeer ervoor te zorgen dat pip de juiste Python versie aanroept, of in ieder geval meer duidelijkheid te krijgen wat ervoor zorgt welke Python versie aangeroepen wordt. Ik dacht dat dit via virtualenv geregeld werd.

Alle reacties


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Nu online

Hero of Time

Moderator LNX

There is only one Legend

Je krijgt dus al netjes terug welke hij gebruikt. Wat zijn de binaries voor python, hoe heten ze in /usr/bin? Wat is er bij /etc/alternatives? En ook leuk, als je een strace doet op pip, welk bestand wordt dan aangeroepen in /usr/bin?

Op mijn Debian systeem is /usr/bin/python een symlink naar /usr/bin/python2.7. Dit zal bij jou ook zo het geval zijn, voor de Python2 versie die je hebt. Let wel op als je die symlink aanpast, want er kan meer op je systeem draaien dat Python nodig heeft en als je die van 2.6 naar 3.5 verandert kan je een hoop slopen.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • amx
  • Registratie: December 2007
  • Laatst online: 07:54
Python 2.6 was al geinstalleerd, en ik heb afaik de laatste versie geinstalleerd (3.5.1)

python [tab] [tab]
code:
1
2
3
python             python3            python3.5m         
python2            python3.5          python3.5m-config
python2.6          python3.5-config   python3-config


In /etc/alternatives zie ik veel softlinks, maar geen verwijzingen naar Python.

ls /etc/alternatives
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
bin-iptables-xml.x86_64       mta-aliasesman
cdrecord                      mta-mailq
cdrecord-cdrecordman          mta-mailqman
cdrecord-dvdrecord            mta-newaliases
cdrecord-dvdrecordman         mta-newaliasesman
cdrecord-readcd               mta-pam
cdrecord-readcdman            mta-rmail
ip6tables.x86_64              mta-sendmail
iptables.x86_64               mta-sendmailman
libip4tc000.x86_64            print
libip4tc0.x86_64              print-cancel
libip6tc000.x86_64            print-cancelman
libip6tc0.x86_64              print-lp
libipq000.x86_64              print-lpc
libipq0.x86_64                print-lpcman
libiptc000.x86_64             print-lpman
libiptc0.x86_64               print-lpq
libxtables400.x86_64          print-lpqman
libxtables4.x86_64            print-lprm
lib-xtables.x86_64            print-lprman
man-ip6tables-restore.x86_64  print-lprmman
man-ip6tables-save.x86_64     print-lpstat
man-ip6tables.x86_64          print-lpstatman
man-iptables-restore.x86_64   sbin-ip6tables-multi.x86_64
man-iptables-save.x86_64      sbin-ip6tables-restore.x86_64
man-iptables.x86_64           sbin-ip6tables-save.x86_64
man-iptables-xml.x86_64       sbin-iptables-multi.x86_64
mkisofs                       sbin-iptables-restore.x86_64
mkisofs-mkhybrid              sbin-iptables-save.x86_64
mkisofs-mkisofsman            spice-xpi-client
mta


Ik heb een strace uitgevoerd. In de strace staat er verwijzingen naar /usr/bin/python.

strace -o /home/amx/Documents/strace.txt pip3 show python && grep bin /home/amx/Documents/strace.txt | grep python
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
execve("/usr/bin/pip3", ["pip3", "show", "python"], [/* 26 vars */]) = 0
readlink("/usr/bin/python", 0x7fffeb7d06b0, 4096) = -1 EINVAL (Invalid argument)
stat("/usr/bin/lib64/python2.6/os.py", 0x7fffeb7d0560) = -1 ENOENT (No such file or directory)
stat("/usr/bin/lib64/python2.6/os.pyc", 0x7fffeb7d0560) = -1 ENOENT (No such file or directory)
stat("/usr/bin/lib64/python2.6/lib-dynload", 0x7fffeb7d0620) = -1 ENOENT (No such file or directory)
read(3, "#!/usr/bin/python\n# EASY-INSTALL"..., 261) = 261
read(3, "#!/usr/bin/python\n# EASY-INSTALL"..., 4096) = 283
stat("/usr/lib64/python2.6/binascii", 0x7fffeb7c7500) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/binascii.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/binasciimodule.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/binascii.py", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/binascii.pyc", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/python2.6/plat-linux2/binascii", 0x7fffeb7c7500) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/plat-linux2/binascii.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/plat-linux2/binasciimodule.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/plat-linux2/binascii.py", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/plat-linux2/binascii.pyc", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib64/python2.6/lib-dynload/binascii", 0x7fffeb7c7500) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/lib-dynload/binascii.so", O_RDONLY) = 5
open("/usr/lib64/python2.6/lib-dynload/binascii.so", O_RDONLY) = 6
stat("/usr/lib64/python2.6/email/binascii", 0x7fffeb7c08d0) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/email/binascii.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/email/binasciimodule.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/email/binascii.py", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.6/email/binascii.pyc", O_RDONLY) = -1 ENOENT (No such file or directory)
lstat("/usr/bin/python", {st_mode=S_IFREG|0755, st_size=9032, ...}) = 0
lstat("/usr/bin/python", {st_mode=S_IFREG|0755, st_size=9032, ...}) = 0
lstat("/usr/bin/python", {st_mode=S_IFREG|0755, st_size=9032, ...}) = 0
open("/usr/bin/python", O_RDONLY)       = 3


Ik heb een alias ingesteld naar python3, dit heeft tot nu toe niks gesloopt. Als ik Python uitvoer, start Python op met versie 3.5.1. Pip verwijst echter naar Python2.6. Ik heb om te testen ook eens een backup gemaakt van de Python binary en een softlink gemaakt naar Python3 genaamd /usr/bin/python. Dan komt er wel een foutmelding van Pip dat er een probleem is.

Ik heb Python3 overigens geinstalleerd door make altinstall. Dat werd aangeraden omdat er inderdaad anders problemen konden ontstaan met verwijzingen naar oudere Python versies.

De installatie van Python3 is zonder foutmeldingen voltooid (wel waarschuwing over ontbrekende SSL module voor Pip). Er zijn echter geen mappen in /usr/lib of /usr/lib64 getiteld python3.5. Er zijn wel mappen getiteld python2.6

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Nu online

Hero of Time

Moderator LNX

There is only one Legend

Python3 libraries vind je waarschijnlijk in /usr/local of /opt.

Maar zoals je in de strace ziet, het eerste wat-ie doet is /usr/bin/python volgen en die binary verder gebruiken.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • amx
  • Registratie: December 2007
  • Laatst online: 07:54
Ik heb een oudere versie van Django geïnstalleerd die nog steeds Python 2.6 ondersteunt.

Voor zover ik kan overzien staan de instellingen in de virtualenv goed ingesteld, en zijn ook alle noodzakelijke onderdelen geïnstalleerd.

Acties:
  • 0 Henk 'm!

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 18-07 22:17

deadinspace

The what goes where now?

amx schreef op dinsdag 26 januari 2016 @ 14:08:
Centos 6.4 heeft standaard Python 2.6.6 en deze wordt niet ondersteund door Django.
CentOS 6 is oud. Als je de mogelijkheid hebt zou ik aan willen raden wat recenters te gebruiken.
Ik heb een virtualenv gemaakt.
Hoe heb je die virtualenv aangemaakt? Wat geven de volgende commando's binnen de virtualenv?
python --version
echo $VIRTUAL_ENV
echo $PATH
amx schreef op woensdag 27 januari 2016 @ 08:16:
Ik heb een oudere versie van Django geïnstalleerd die nog steeds Python 2.6 ondersteunt.
Gebruik die in ieder geval niet; versies ouder dan 1.8 ontvangen geen security support meer.

Acties:
  • 0 Henk 'm!

  • amx
  • Registratie: December 2007
  • Laatst online: 07:54
Dank je voor je advies. Is inderdaad ook de bedoeling.


virtualenv heb ik met het commando virtualenv aangemaakt, en vervolgens met source geactiveerd.

code:
1
2
3
4
5
6
7
8
python --version
Python 3.5.1

echo $VIRTUAL_ENV
/home/amx/.virtualenvs/djangodev

echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin


De huidige VM draait op Virtualbox als eerste testomgeving. De bedoeling is dat de VM binnenkort in een volwaardige virtualisatieomgeving komt te draaien. Er kan dan meteen de nieuwste versie van Centos worden geïnstalleerd. Daarbij is de default Python versie 2.7.

Eerlijk is eerlijk: de omgevingsvariabele $VIRTUAL_ENV was leeg in een tweede ssh sessie naar de VM. Ik heb de installatiestappen van de nieuwere versie van Django nog eens herhaald nadat ik de virtualenv nog eens heb geactiveerd met
code:
1
 source /home/amx/.virtualenvs/djangodev/bin/activate
binnen dezelfde shell. Resultaat bleef hetzelfde: Pip roept versie 2.6.6 aan.

Acties:
  • 0 Henk 'm!

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 18-07 22:17

deadinspace

The what goes where now?

amx schreef op woensdag 27 januari 2016 @ 17:18:
virtualenv heb ik met het commando virtualenv aangemaakt
Als je "virtualenv" zonder opties gebruikt, dan pakt hij de standaard Python. Op mijn machines (die nog defaulten naar Python2) moet ik "virtualenv --python=python3" gebruiken.
code:
1
2
3
4
5
6
7
8
python --version
Python 3.5.1

echo $VIRTUAL_ENV
/home/amx/.virtualenvs/djangodev

echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

Ah, daar gaat iets mis. Je $PATH zou /home/amx/.virtualenvs/djangodev/bin moeten bevatten. Dat is hoe virtualenv python en pip override. Kun je eens je $PATH bekijken voordat je activate source't en direct nadat je activate source't?
... Daarbij is de default Python versie 2.7.
Let wel op dat Python 2 en 3 niet compatible zijn. Als je nu in Python 3 test, dan kun je later problemen krijgen als je dat in Python 2 wil draaien ;)
Eerlijk is eerlijk: de omgevingsvariabele $VIRTUAL_ENV was leeg in een tweede ssh sessie naar de VM.
Dat is te verwachten, je moet voor elke sessie de virtualenv opnieuw activeren voordat hij gebruikt wordt.
Pagina: 1