LINUX.ORG.RU

Работа venv и pip в debian 12

 , ,


0

1

Привет, ЛОР.

Debian 12.4. Делаю проект на python. Установил venv, засорсил aсtivate, поставил туда через pip несколько пакетов. Все работает. Структура директорий:

.venv/
├── bin
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── Activate.ps1
│   ├── flask
│   ├── fonttools
│   ├── pip
│   ├── pip3
│   ├── pip3.11
│   ├── pyftmerge
│   ├── pyftsubset
│   ├── py.test
│   ├── pytest
│   ├── python -> python3
│   ├── python3 -> /usr/bin/python3
│   ├── python3.11 -> python3
│   └── ttx
├── include
│   └── python3.11
├── lib
│   └── python3.11
├── lib64 -> lib
├── pyvenv.cfg
└── share
    └── man

Было несколько обновлений дебиана, не отслеживал. Возвращаюсь к проекту, сорсю activate, чтобы попасть в терминале в venv проекта, а дальше начинаются странности. Во-первых, я не могу запустить проект, потому, что установленные ранее через pip библиотеки не видит - command not found. Во-вторых, я не могу установить заново эти библиотеки или установить другие, потому что выскакивает дебиаоновское предупреждение, когда я в venv:

error: externally-managed-environment

Хотя

/home/user/projects/myproject/.venv/bin:/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

и

which python3
/usr/bin/python3

which pip
/usr/bin/pip

При этом же, прямое обращение к python в venv срабатывает

.venv/bin/python3 -m venv pip instal somepackage

...лог успешной установки...

Насколько я могу судить исходя из ситуации, дело в том, что в путях при активации виртуальной среды происходит какая-то ошибка, из-за чего вместо питона в виртуалке задействуется общесистемный питон, несмотря на то, что в PATH путь к виртуалке стоит раньше.

Как пофиксить?


так у тебя ж питон системный используется, ты ж это сам постишь.

which python3
/usr/bin/python3

скорее всего venv не активировался правильно

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

Так вот и я про это пишу.

echo $PATH
/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

source .venv/bin/activate

/home/user/projects/myproject/.venv/bin:/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Тут других способов активации для bash/zsh не описано.

Вопрос, как пофиксить?

curbar
() автор топика

у меня в activate есть такая строчка:

# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands.  Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
    hash -r 2> /dev/null
fi

возможно, что-то связанное с этим

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

Опять же…

PATH=.venv/bin:${PATH}

echo $PATH
.venv/bin:/home/user/projects/myproject/.venv/bin:/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

which python3
.venv/bin/python3

Чудеса

curbar
() автор топика
Ответ на: комментарий от gruy

Каждый раз, когда мне нужен будет venv, пересоздавать его? Вариант, конечно, согласен, но должно быть более правильное решение.

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

После обновления системы - да, такое бывает (когда сменилась базовая версия Python в дистрибутиве).

Иногда мне помогало просто запустить pip .venv заново.

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

Это что-то дебиано специфичное или везде так?

curbar
() автор топика

зачем тебе инструменты (венв) которыми ты не умеешь пользоваться? дай гуманитарию лобзик так он хуй себе в корыто переточит…

суть ответа,- твой не законченный (но не сомненно крутой) проект не поспевает за обновами. то есть решать эти траблы должен не пипитон, но ты решая там с зависимостями (ну эт в смом простом случае)

но дам реку: при начальном составлении приложухи то есть при первом рождении, то есть при первом написании законченой проги, вся система должна ложится(прогибаться) под неё, всё остальное потом. а программист как хобби… нууу

User-ganz
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.