Sobre como manter seus pacotes Python quando o sistema Python está atualizado: vejo duas opções:
-
Você pode instalar coisas do Python que não sejam do Ubuntu com
easy_install --install-dir /usr/local/python
. Então, certifique-se de que todas as suas webapps incluem esse diretório emsys.path
, por exemplo, incluindo-o em PYTHONPATH, ou usando um diretório que seja automaticamente incluído porsite.py
(cujo documento declara que "Local addons entram em/usr/local/lib/python<version>/dist-packages
") -
Você pode usar o virtualenvs, desde que possa colocar todos os dados do aplicativo e configuração em um diretório independente do código. Aqui está um procedimento de esboço:
a. Coloque todo o material independente de código no diretório
myapp-data/
b. Crie virtualenv
myapp-code.XXX/
(ondeXXX
é algum número de versão exclusivo, por exemplo,date -I
)c. Coloque o código do aplicativo e todos os pacotes de dependência em
myapp-code.XXX
d.
ln -s myapp-code.XXX myapp-code
Quando você precisar fazer upgrade, repita as etapas b. e C. com um código de revisão diferente YYY, então: interrompa o aplicativo em execução no momento, link simbólico
myapp-code
paramyapp-code.YYY
, iniciar aplicativo de virtualenv %código%. Se algo der errado, você ainda pode reverter para o velho virtualenv rapidamente.
Aparentemente, 2. é mais trabalho (mas myapp-code.YYY
mais algum shell-scripting
te levar muito longe para automatizá-lo), mas também deve ser mais
robusto e permitirá que você execute simultaneamente aplicativos que dependam
em versões diferentes de algum pacote Python.
Com relação à sua pergunta sobre um pacote pip
-like for Python:
apt-get
explicitamente desaprova tal coisa e por um bom motivo:
APIs de pacote e comportamento podem mudar em diferentes versões.
Portanto, se seu código é executado bem contra a versão X, pode falhar quando
executado com a versão X + 1. Isso é exatamente o que o pip
tenta evitar
com os recursos "congelar" e "lista de requisitos".
Claro, o mesmo argumento pode ser aplicado a qualquer programa em um binário
distribuição como o Ubuntu; de fato, o que torna pip
útil é que
Debian e Ubuntu fornecem um lançamento coordenado de interoperabilidade
pacotes: muito esforço dos mantenedores garante que
todos os pacotes do Ubuntu nos repositórios principais são compatíveis.
Não há apenas uma versão coordenada de pacotes Python: cada pacote é independente e nenhuma informação está disponível sobre o que versão de outros pacotes Python são compatíveis com ele. (Isso poderia possivelmente seja uma boa adição aos metadados do PyPI.)