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.XXXd.
ln -s myapp-code.XXX myapp-codeQuando 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-codeparamyapp-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.)