É possível salvar binários que o pip compila ao instalar um pacote?

1

Estou trabalhando em um projeto para um Raspberry Pi 3. Uma das coisas que meu projeto requer é o cython.

Executar pip install cython em um Raspberry Pi dentro de um virtualenv leva cerca de 40 minutos para ser concluído, já que o cython aparentemente precisa ser compilado primeiro. Durante esses 40 minutos, top mostra o cc em execução, tentando compilar coisas, usando 100% de um núcleo.

Eu preciso fazer isso várias vezes todos os dias, pois continuo precisando redefinir o cartão SD para uma nova imagem do Raspbian. Isto é obviamente muito demorado e está a atrasar o progresso.

Quando pip é feito compilando cython, onde os binários são armazenados? Dentro do virtualenv? Algum outro lugar no sistema de arquivos?

Se eles estiverem armazenados no virtualenv, posso arquivar toda a pasta virtualenv e restaurá-la em um novo Linux e esperar que funcione? Eu sei que virtualenvs não devem ser portáveis (sem usar o --relocatable arg, que parece ter seus próprios problemas), mas no meu caso, o caminho do virtualenv permanecerá o mesmo quando eu restaurá-lo.

    
por Tal 26.06.2018 / 20:59

1 resposta

1

Basta copiar o arquivo wheel do diretório de cache. Quando pip install pkgname é emitido e pip não encontra uma roda compatível para instalar, ele cria um a partir da origem dist e armazena em cache para reutilização para reinstalações futuras. Para encontrar o arquivo de roda, edite

$ find $HOME/.cache/pip -type f -name Cython*.whl

Faça o backup do arquivo; para instalar a partir do arquivo local, basta emitir

$ pip install path/to/file.whl

Para onde ir a partir daqui: repositório local

Quando você tem um monte de rodas pré-construídas coletadas, o próximo passo seria a configuração de um repositório PyPI local para instalação. A maneira mais simples é organizar as rodas em dirs do pacote e executar um servidor HTTP simples:

└── repodir
    ├── Cython
    │   └── Cython-0.28.0-cp36-cp36m-linux_aarch64.whl
    ...

Inicie o servidor com, por exemplo,

$ python3 -m http.server -p 9000

Agora você pode passar o repo para pip :

$ pip install Cython --extra-index-url=http://127.0.0.1:9000

ou até mesmo persistir o URL do repo no pip.conf para não inseri-lo sempre:

# pip.conf
[global]
extra-index-url=http://127.0.0.1:9000

Se você procurar mais, existem muitos servidores de repo PyPI, como devpi , que oferecem gerenciamento de pacotes versátil, interface web, etc.

    
por 28.06.2018 / 10:26