LINUX.ORG.RU

Другая версия python в виртуальном окружении

 , ,


0

1

Всем ку!) Ситуация возникла следующая: в системе стоит python 3.5.3, и он не обновляется, потому что в репозитории stable это последняя версия, пусть так и остается. Но в виртуальное окружение хотел бы версию python 3.6.4. Возможно ли это сделать так, чтобы ничего не сломать в системе? Если да, то как это сделать грамотно?


Ответ на: комментарий от a-lexx

не надо глупостями заниматься

в дебиане есть два разных пакета: python3.5 и python3.6. Поставь оба, при этом python3 у тебя будет мапиться на python3.5, а для создания окружения с python3.6 указывай явно:

virtualenv -p python3.6 ./venv/

alpha ★★★★★
()
Ответ на: комментарий от alpha

3.6 только в unstable и testing

можно с помощью pip обновить сам питон

Нет

pawnhearts ★★★★★
()
Последнее исправление: pawnhearts (всего исправлений: 1)
Ответ на: комментарий от alpha

Если я временно добавлю тестовый репозиторий в sources.list, не поставит ли система python 3.6 так, что затрет python 3.5?

a-lexx
() автор топика
Ответ на: комментарий от pawnhearts

Я у себя на debian просто скомпилировал с --prefix=/opt/python36

Сорцы где взяли? С зависимостями нормально все было?

a-lexx
() автор топика
Ответ на: комментарий от a-lexx

теоретически нет, на практике я так делаю на fedora, а на debian не пробовала, возможны нюансы

Судя по dpkg -L пожалуй лучше ставить python3.6-minimal, а не python3.6, так как он не содержит /usr/lib/python3 и прочих shared-файлов.

# dpkg -L python3.5
/.
/usr
/usr/bin
/usr/bin/2to3-3.5
/usr/bin/pydoc3.5
/usr/bin/pygettext3.5
/usr/lib
/usr/lib/python3
/usr/lib/python3/dist-packages
/usr/lib/python3.5
/usr/lib/python3.5/lib-dynload
/usr/share
/usr/share/applications
/usr/share/applications/python3.5.desktop
/usr/share/doc
/usr/share/doc/python3.5
/usr/share/doc/python3.5/ACKS.gz
/usr/share/doc/python3.5/NEWS.gz
/usr/share/doc/python3.5/README.Debian
/usr/share/doc/python3.5/README.gz
/usr/share/doc/python3.5/changelog.Debian.gz
/usr/share/doc/python3.5/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/python3.5
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/2to3-3.5.1.gz
/usr/share/man/man1/pdb3.5.1.gz
/usr/share/man/man1/pydoc3.5.1.gz
/usr/share/man/man1/pygettext3.5.1.gz
/usr/share/man/man1/pysetup3.5.1.gz
/usr/share/pixmaps
/usr/share/pixmaps/python3.5.xpm
/usr/bin/pdb3.5
/usr/share/doc/python3.5/changelog.gz
# dpkg -L python3.5-minimal
/.
/usr
/usr/bin
/usr/bin/python3.5
/usr/bin/python3.5m
/usr/share
/usr/share/binfmts
/usr/share/binfmts/python3.5
/usr/share/doc
/usr/share/doc/python3.5-minimal
/usr/share/doc/python3.5-minimal/README.Debian
/usr/share/doc/python3.5-minimal/changelog.Debian.gz
/usr/share/doc/python3.5-minimal/copyright
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/python3.5.1.gz
/usr/share/man/man1/python3.5m.1.gz
alpha ★★★★★
()
Ответ на: комментарий от alpha

лучше ставить python3.6-minimal, а не python3.6, так как он не содержит /usr/lib/python3 и прочих shared-файлов

Так, и если я буду устанавливать пакеты через pip в виртуальном окружении, то в /usr/lib/python3 ничего не будет заливаться, я правильно понимаю?

a-lexx
() автор топика
Ответ на: комментарий от a-lexx

Чтобы создать виртуальное окружение тебе нужен бинарник самого питона.

Этот бинарник никаким pip не ставится. Его можно собрать самому руками как советуют другие отписавшиеся в этом треде, либо его можно поставить из собранного уже за тебя deb-пакета python3.6-minimal.

Дальше от обычного пользователя создаешь virtualenv с этим интрепретатором и всё остальное делается локально внутри venv. Ты физически в /usr/lib уже ничего не сможешь записать. Главное sudo pip install никогда не делать.

alpha ★★★★★
()
Последнее исправление: alpha (всего исправлений: 2)

ставь - главное что алиас /usr/bin/python3 отстался тем же

Jopich1
()
Ответ на: комментарий от alpha

от обычного пользователя

никого, кроме root, на сервере нет)

Главное sudo pip install никогда не делать

что, даже при активированном окружении нельзя будет такое делать?

a-lexx
() автор топика
Ответ на: комментарий от a-lexx

что, даже при активированном окружении нельзя будет такое делать?

можно, но если ты в какой-то момент забудешь его активировать из-за ошибки в каком-то очередном bash-скрипте, разгребать будешь долго

никого, кроме root, на сервере нет)

тебе root дан не для того чтобы перед соседями хвастать, а чтобы ты под изолированные задачи создавал изолированных пользователей

alpha ★★★★★
()
Ответ на: комментарий от a-lexx

потому что у тебя есть пакет с 3.5. Эта команда поставит все зависимости, необходимые для сборки питона 3.5, а для 3.6 они примерно такие же.

pawnhearts ★★★★★
()
Ответ на: комментарий от pawnhearts

Напиши, плз, пошагово, как все делал, с момента после распаковки архива. У меня чет ошибка выпрыгивает:

Error: Command '['/home/t-project/tpro-py-env/bin/python', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
a-lexx
() автор топика
Ответ на: комментарий от a-lexx

Это вообще где такое? Сейчас дебиана нет под рукой. Но что-то вроде

./configure --prefix=/opt/python36
make
sudo make install
mkvirtualenv -p /opt/python36/bin/python test
workon test
pip install something

pawnhearts ★★★★★
()
Ответ на: комментарий от pawnhearts

Это вообще где такое?

/opt/python36/bin/python3 -m venv tpro-py-env
Error: Command '['/home/t-project/tpro-py-env/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.

Это под рутом вообще надо делать? Мб прав не хватает?

a-lexx
() автор топика
Ответ на: комментарий от a-lexx

Нет, не под рутом. Незнаю что за ошибика. Попробуй через virtualenvwrapper(mkvirtualenv это оттуда).

pycharm есть? можешь там выбрать интерпретатор из /opt. оно создаст virtualenv само

pawnhearts ★★★★★
()

Первый просто вариант уже сказали: pyenv. Второй: miniconda. Остальное балавство.

krasoffski
()

Про pyenv и все остальное: наткнулся в гугле вот на этот пост, который заставляет меня сомневаться в использовании чего-либо, кроме нативного venv. Еще нашел, что ошибка

Error: Command '['*/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
лечится установкой пакета python3.6-venv. Почему-то в Debian/Ubuntu python3-venv и python3.6-venv идут отдельно от основного python36. Но пакетный менеджер установит python3.6-venv глобально, а мне нужно только в виртуальном окружении. Если бы можно было загнать python3-venv и python3.6-venv в /opt, туда где у меня сейчас живет python36, да так загнать, чтобы python36 их увидел... но я не знаю как это сделать.

a-lexx
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.