# 2. Utilizando Python em plataformas Unix

## 2.1. Obtendo e instalando a versão mais recente do Python

### 2.1.1. No Linux

O Python vem pré-instalado na maioria das distribuições Linux e está disponível como um pacote em todos as outras. No entanto, existem certos recursos que podemos querer utilizar e que não estão disponíveis no pacote da sua distro. Poderás compilar facilmente a versão mais recente do Python desde a origem.

Nas situações em que o Python não vier pré-instalado e também não estiver nos repositórios, poderás facilmente gerar os pacotes para a sua distro. Veja os seguintes links:

Ver também

https://www.debian.org/doc/manuals/maint-guide/first.en.html

  para usuários Debian

https://en.opensuse.org/Portal:Packaging

  para usuários OpenSuse

https://docs.fedoraproject.org/en-US/package-maintainers/Packaging_Tutorial_GNU_Hello/

  para usuários Fedora

https://slackbook.org/html/package-management-making-packages.html

  para usuários do Slackware

### 2.1.2. No FreeBSD e OpenBSD

- usuários do FreeBSD, para adicionar a utilização do pacote utilize:

      pkg install python3

- Usuários do OpenBSD, para adicionar pacotes use:

      pkg_add -r python

      pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/<insert your architecture here>/python-<version>.tgz

  Por exemplo, usuários i386 podem pegar a versão 2.5.1 do Python usando o comando:

      pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/i386/python-2.5.1p2.tgz

### 2.1.3. On OpenSolaris

You can get Python from OpenCSW. Various versions of Python are available and can be installed with e.g. `pkgutil -i python27`.

## 2.2. Compilando o Python

Se você quer compilar o CPython, a primeira coisa que você precisa fazer é baixar o código-fonte. Você pode baixar a última versão ou usar o git para fazer um clone. (Se você pretende contribuir modificações, você vai precisar um “clone”.)

O processo de compilação consiste nos comandos usuais:

    ./configure
    make
    make install

Opções de configuração e advertências para plataformas específicas do Unix estão amplamente documentadas no arquivo README.rst na raiz da árvore de fontes Python.

Aviso

`make install` pode sobrescrever ou mascarar o arquivo binário `python3`. `make altinstall` é, portanto, recomendado ao invés de `make install` uma vez que o mesmo apenas instala o arquivo `exec_prefix/bin/pythonversion`.

## 2.3. Paths e arquivos relacionados com o Python

Estes estão sujeitos a diferenças dependendo das convenções de instalação local; `prefix` e `exec_prefix` dependem da instalação e devem ser interpretados da mesma forma que para o software GNU; eles poderão ser os mesmos.

Por exemplo, na maioria dos sistemas Linux, o padrão para ambos é `/usr`.

Arquivo/diretório | Significado
--- | ---
`exec_prefix/bin/python3` | Localização recomendada do interpretador.
`prefix/lib/pythonversion`, `exec_prefix/lib/pythonversion` | A localização recomendada dos diretórios contendo os módulos padrão.
`prefix/include/pythonversion`, `exec_prefix/include/pythonversion` | Localizações recomendadas dos diretórios contendo os arquivos de inclusão necessários para o desenvolvimento de extensões Python e incorporação do interpretador.

## 2.4. Diversos

Para usar facilmente scripts Python no Unix, você precisa torná-los executáveis, por exemplo, com

    $ chmod +x script

e colocar uma linha Shebang apropriada no topo do script. Uma boa escolha normalmente é

    #!/usr/bin/env python3

que procura o interpretador do Python no conjunto `PATH`. No entanto, alguns sistemas Unix podem não ter o comando env, então você pode precisar codificar `/usr/bin/python3` como o caminho do interpretador.

Para usar comandos Shell em seus scripts Python, veja o módulo `subprocess`.

## 2.5. OpenSSL personalizado

1. Para usar a configuração OpenSSL do seu fornecedor e armazenamento confiável do sistema, localize o diretório com o arquivo `openssl.cnf` ou link simbólico em `/etc`. Na maioria das distribuições o arquivo está em `/etc/ssl` ou em `/etc/pki/tls`. O diretório também deve conter um arquivo `cert.pem` e/ou um diretório `certs`.

       $ find /etc/ -name openssl.cnf -printf "%h\n"
       /etc/ssl

2. Baixe, construa e instale o OpenSSL. Certifique-se de usar `install_sw` e não `install`. O destino `install_sw` não substitui o `openssl.cnf`.

       $ curl -O https://www.openssl.org/source/openssl-VERSION.tar.gz
       $ tar xzf openssl-VERSION
       $ pushd openssl-VERSION
       $ ./config \
           --prefix=/usr/local/custom-openssl \
           --libdir=lib \
           --openssldir=/etc/ssl
       $ make -j1 depend
       $ make -j8
       $ make install_sw
       $ popd

3. Construa o Python com o OpenSSL personalizado (veja as opções configure `--with-openssl` e `--with-openssl-rpath`)

       $ pushd python-3.x.x
       $ ./configure -C \
           --with-openssl=/usr/local/custom-openssl \
           --with-openssl-rpath=auto \
           --prefix=/usr/local/python-3.x.x
       $ make -j8
       $ make altinstall

Nota

As versões de patches do OpenSSL têm uma ABI compatível com versões anteriores. Você não precisa recompilar o Python para atualizar o OpenSSL. É suficiente substituir a instalação personalizada do OpenSSL por uma versão mais recente.