Dê uma olhada nesta questão. Ele fala sobre ter o pip instalado em um diretório diferente. Isso permitiria manter as instalações do rpm e ter a versão mais recente. Eu provavelmente iria desinstalar a versão rpm se você não planeja usá-lo.
O Python pip
e muitos módulos Python são fornecidos por meio dos repositórios do CentOS Linux. No CentOS 7.x Linux, posso instalar pip
e pymongo
com o gerenciador de pacotes de distribuição padrão ( yum install python-pip python-pymongo
).
No entanto, a versão de pymongo
que está disponível no repositório já é muito antiga. A versão de pip
também está atrasada, por isso recomenda imediatamente a execução de pip install --upgrade pip
.
Existe um consenso sobre o que se deve fazer aqui? Usar pip
para executar as atualizações substituirá os arquivos que vieram dos RPMs, portanto, é provável que você receba reclamações sobre isso no gerenciador de pacotes.
É melhor não instalar pip
e os módulos do RPM? Talvez apenas instalar o Python a partir do RPM e, em seguida, instalar todos os módulos do pip
(para que nenhum dos módulos do Python sejam do RPM e sejam totalmente gerenciados pelo pip
)?
Dê uma olhada nesta questão. Ele fala sobre ter o pip instalado em um diretório diferente. Isso permitiria manter as instalações do rpm e ter a versão mais recente. Eu provavelmente iria desinstalar a versão rpm se você não planeja usá-lo.
O CentOS 7.x é derivado do Red Hat Enterprise 7.x, projetado para ser estável . Isso significa inevitavelmente que os programas que estão disponíveis nos repositórios foram testados por um tempo. Você pode ver isso na descrição em seu site:
The CentOS Project is a community-driven free software effort focused on delivering a robust open source ecosystem. For users, we offer a consistent manageable platform that suits a wide variety of deployments. For open source communities, we offer a solid, predictable base to build upon, along with extensive resources to build, test, release, and maintain their code.
Se você quer um código "de ponta", você pode usar o Fedora . O Fedora tem objetivos diferentes:
The Fedora Project is a global partnership of free software community members. The Fedora Project is sponsored by Red Hat, which invests in our infrastructure and resources to encourage collaboration and incubate innovative new technologies. Some of these technologies may later be integrated into Red Hat products. They are developed in Fedora and produced under a free and open source license from inception, so other free software communities and projects are free to study, adopt, and modify them.
Existem tradeoffs, mas você não pode ter "stable" e "new" ao mesmo tempo.
Is it better not to install pip and the modules from RPM? Perhaps just installing Python from RPM and then installing all modules from pip (so that none of the Python modules are from RPM and are wholly managed by pip)?
É 'ok' instalar o pip e outros módulos Python do gerenciador de pacotes do seu sistema operacional. Você pode não ter mais escolha sobre isso, pois muitos componentes do sistema dependem do Python e, mesmo em uma versão de instalação mínima do sistema operacional, você encontrará os módulos Python + Python instalados como padrão.
Portanto, sempre que você achar que precisa atualizar a versão 'system-wide' do pip ou qualquer um dos módulos do Python, mas não quer interferir nos arquivos gerenciados pelo gerenciador de pacotes, faça o seguinte:
As instruções a seguir são para um sistema operacional derivado do RHEL e a versão do Python disponível na época era 2.7.x. Você precisará ajustar o PYTHONPATH para corresponder à sua versão instalada do Python.
Verifique se a versão do gerenciador de pacotes do python-pip está instalada. por exemplo. yum -y install python-pip
.
Crie um script profile.d para configurar a variável de ambiente PYTHONPATH:
# Ensure PYTHONPATH is configured to use /usr/local/lib*/python2.7/site-packages
read -r -d '' pythonpath_profile_script <<'EOF'
pythonpathmunge () {
case ":${PYTHONPATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PYTHONPATH=$PYTHONPATH:$1
else
PYTHONPATH=$1:$PYTHONPATH
fi
esac
}
pythonpathmunge /usr/local/lib/python2.7/site-packages
pythonpathmunge /usr/local/lib64/python2.7/site-packages
export PYTHONPATH
EOF
echo "Creating the /etc/profile.d/pythonpath.sh profile script:"
echo "${pythonpath_profile_script}" > /etc/profile.d/pythonpath.sh
chown root.root /etc/profile.d/pythonpath.sh
chmod -v 0644 /etc/profile.d/pythonpath.sh
source /etc/profile.d/pythonpath.sh
hash -r
Você pode então escolher instalar a última versão do pip ou qualquer outro módulo python via:
pip install --upgrade <<PYTHON MODULE NAME>> --ignore-installed --install-option="--prefix=/usr/local" --log /var/log/<<PYTHON MODULE NAME>>-install-$(date "+%Y%m%d%H%M%S").log
por exemplo,
pip install --upgrade pip --ignore-installed --install-option="--prefix=/usr/local" --log /var/log/pip-install-$(date "+%Y%m%d%H%M%S").log
hash -r
# Notice the use of 'hash -r' to refresh bash's hash table of recently
# executable programs. Without doing this you may find that the 'pip'
# command being used is not the version you just installed.
Isso instalará o módulo Python solicitado em /usr/local
, onde não interferirá nos arquivos gerenciados pelo gerenciador de pacotes do sistema. A opção --ignore-installed
garante que o pip não toque na versão existente do módulo. Além disso, devido ao uso da variável de ambiente PYTHONPATH, os caminhos /usr/local/lib*/python2.7/site-packages
serão usados antes de qualquer pacote instalado pelo sistema. ou seja,
[root@localhost ~]# python
Python 2.7.5 (default, Sep 15 2016, 22:37:39)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print '\n'.join(sys.path)
/usr/local/lib64/python2.7/site-packages <---
/usr/local/lib/python2.7/site-packages <---
/root
/usr/lib64/python27.zip
/usr/lib64/python2.7
/usr/lib64/python2.7/plat-linux2
/usr/lib64/python2.7/lib-tk
/usr/lib64/python2.7/lib-old
/usr/lib64/python2.7/lib-dynload
/usr/lib64/python2.7/site-packages
/usr/lib/python2.7/site-packages
>>>
Por fim, pelo menos no CentOS / RHEL, o caminho /usr/local/bin
é anterior a qualquer outro caminho binário do sistema na variável de ambiente PATH e, portanto, isso também garante que quaisquer binários mais recentes instalados em / usr / local / bin tenham precedência acima do sistema instalado. ou seja,
[root@localhost ~]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Se você quiser usar o Python apenas para si mesmo sem estragar o python do seu sistema, dê uma olhada em um produto chamado Anaconda da Continuum. link esta instalação do python etc ... irá instalar no seu diretório home e alterar os caminhos para que você não esteja instalando para o seu sistema python e, possivelmente, bagunçando o seu sistema. Você também pode criar ambientes virtuais e os ambientes Conda dessas opções permitem que você experimente algo e, se você não gostar, apenas jogue fora o ambiente.
Is there a consensus on what one should do here?
Sim, não modifique manualmente a instalação Python gerenciada pelo sistema (pip em execução) - consulte Quais são os riscos de executar o 'sudo pip' ? Para uma discussão mais aprofundada sobre o assunto, por favor leia a edição do pip 1668 Padrão para --user e outros questões ligadas a ele.
As soluções mais comuns são:
Teoricamente, outra solução possível seria usar a opção --target
com pip e definir a variável de ambiente PYTHONPATH
. No entanto, a opção --target
tem muitos (atualmente 12) problemas .