Может ли кто-нибудь объяснить такое поведение питона?

#python #linux #docker #package #centos7

Вопрос:

Я запускаю py 2.7.18 в контейнере docker , я использую пакет rh-python27 в CentOS 7.

Один из необходимых gitdb пакетов моего проекта, когда я запускаю контейнер docker, он жалуется на то, что gitdb не найден. но я упомянул об этом в своем req.txt.

Я устранил неполадки в своем контейнере docker и обнаружил следующее поведение. Может ли кто-нибудь объяснить мне причину такого поведения. почему python указывает на opt/rh/python27.... вместо /usr/bin/python ?

 root@cicd-docker CENTOS7 /usr/bin > pwd
/usr/bin
root@cicd-docker CENTOS7 /usr/bin > ./python
Python 2.7.18 (default, Oct 23 2020, 13:34:23) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.__file__
'/usr/lib64/python2.7/os.pyc'
>>> import gitdb
>>> exit()
root@cicd-docker CENTOS7 /usr/bin > python
Python 2.7.18 (default, Oct 23 2020, 13:34:23) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.__file__
'/opt/rh/python27/root/usr/lib64/python2.7/os.pyc'
>>> import gitdb
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named gitdb
>>> exit()
root@cicd-docker CENTOS7 /usr/bin > sudo python
Python 2.7.5 (default, Nov 16 2020, 22:23:17) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.__file__
'/usr/lib64/python2.7/os.pyc'
>>> import gitdb
>>> exit()
root@cicd-docker CENTOS7 /usr/bin > 
 

Или как правильно установить python2.7.18 в centos docker?

Комментарии:

1. Это внутри контейнера Докера? Какое базовое изображение вы используете? Как выглядит ваш док-файл? Почему вы используете старую (EOL) версию Python?

2. Мой проект должен быть запущен на python 2.7.18. (примечание: В настоящее время мы переносим код на py 3.8.x) Да, он работает внутри контейнера docker, базового образа centos:7

3. Для вашего второго запуска вы, похоже, запускаете python /opt/rh/python27/root/usr/bin . Попробуй PATH=/usr/bin:$PATH , а потом беги python

4. @Philippe Конечно, я попробую это сделать.

5. @Philippe Вот как выглядит мой путь. PATH=/opt/rh/rh-git218/root/usr/bin:/opt/rh/python27/root/usr/bin:/usr/bin:/root/bin:/root/perl5/perlbrew/bin:/usr/local/git/bin:/opt/rh/rh-git218/root/usr/bin:/usr/lib64/qt-3.3/bin:/root/perl5/bin:/usr/local/sbin:/usr/sbin:/sbin:/bin:/usr/bin:/usr/local/bin:/var/lib/snapd/snap/bin:/root/bin:/root/bin:/root/bin