Como / É possível instalar o python de maneira portátil?

3

Estou trabalhando em um script python que cuida de migrar um banco de dados mysql com um determinado esquema / estrutura para um banco de dados postgresql com uma estrutura diferente.

Durante a fase de desenvolvimento, eu estava trabalhando dentro de uma máquina virtual ( CentOS7 ) com todo o meu ambiente configurado corretamente.

Atualmente estou na fase de testes e estou tentando executar o script em um servidor real pela primeira vez, mas já estou enfrentando problemas causados por ambiente diferente (versão python ou python-modules incompatibilidade).

Desde que eu tenha que executar este script em muitos servidores (todos eles serão servidores GNU / Linux, a maioria deles CentOS, alguns Debian), eu estou procurando uma maneira de integrar python, e todos os python-modules (dependências) diretamente no meu script , uma espécie de versão portátil do python, se você sabe o que quero dizer.

Por exemplo Gostaria de integrar ao meu pacote de scripts os seguintes elementos / binários:

  • Python 2.7.5
  • mysql-connector-python-2.1.3-1
  • python-psycopg2
por lese 04.04.2016 / 10:37

1 resposta

4

virtualenv é provavelmente o que você está procurando. Vejo link :

A Virtual Environment is a tool to keep the dependencies required by different projects in separate places, by creating virtual Python environments for them. It solves the “Project X depends on version 1.x but, Project Y needs 4.x” dilemma, and keeps your global site-packages directory clean and manageable.

Install virtualenv via pip:

$ pip install virtualenv

Basic Usage

  1. Create a virtual environment for a project:

    $ cd  my_project_folder 
    $ virtualenv venv 
    

    virtualenv venv will create a folder in the current directory which will contain the Python executable files, and a copy of the pip library which you can use to install other packages. The name of the virtual environment (in this case, it was venv) can be anything; omitting the name will place the files in the current directory instead.

    This creates a copy of Python in whichever directory you ran the command in, placing it in a folder named venv.

    You can also use a Python interpreter of your choice.

    $ virtualenv -p /usr/bin/python2.7 venv 
    

    This will use the Python interpreter in /usr/bin/python2.7

  2. To begin using the virtual environment, it needs to be activated:

    $ source venv/bin/activate 
    

    The name of the current virtual environment will now appear on the left of the prompt (e.g. (venv)Your-Computer:your_project UserName$) to let you know that it’s active. From now on, any package that you install using pip will be placed in the venv folder, isolated from the global Python installation.

    Install packages as usual, for example:

    $ pip install requests 
    

    If you are done working in the virtual environment for the moment, you can deactivate it:

    $ deactivate
    

Se você deseja mover seu ambiente:

You can make a list of installed packages inside the virtualenv:

    $ pip freeze > requirements.txt

And install them on the destination virtualenv using:

    $ pip install -r requirements.txt

Da minha experiência, virtualenvs podem ser criados e gerenciados para python2 e python3 (no meu sistema, eu tenho tanto virtualenv e virtualenv3 )

Note que o virtualenv não fornece o intérprete python. Ele permite que você crie ambientes isolados onde um interpretador python já está disponível.

IMHO, agrupar binários python no seu script não apenas aumentaria muito o seu pacote, como também tornaria o seu script menos portátil, pois os binários seriam compilados para o SO e o glibc específicos. Se alguém quisesse usar o script em uma arquitetura OS / Linux (linux) diferente, isso não seria possível, a menos que você fornecesse um pacote para essa versão.

    
por 04.04.2016 / 11:58