Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python Wheels - Esmagando os eggs

Python Wheels - Esmagando os eggs

Básico sobre Python Wheels

Avatar for Marcelo Tambalo

Marcelo Tambalo

November 21, 2013
Tweet

Other Decks in Programming

Transcript

  1. Egg (Python) Egg é uma forma de empacotar informações adicionais

    a um projeto Python, que permite que as dependências do projeto sejam verificadas e satisfeitas em tempo de execução, bem como permite que projetos forneçam plugins para outros projetos. Os pacotes eggs são similares aos Jars em Java. Há vários formatos binários que representam um pacote egg, porém o mais comum é o arquivo no formato zip '.egg' Todos os formatos suportam a inclusão de dados específicos de pacote, metadados de extensão de projeto, extensões C e código Python.
  2. Wheel (Python) 1. É um formato de empacotamento para Python.

    2. Compatível PEP 376. 3. O "Wheel" é um arquivo em formato ZIP '.whl'. 4. Mantém um formato muito próximo ao formato em disco. 5. Muitos pacotes serão instalados apenas com o passo "Unpack" (basta extrair o arquivo para sys.path). 6. Arquivos '.whl' podem ser instalados via pip. 7. Preserva informações suficientes para espalhar o seu conteúdo para fora em seus paths finais em qualquer momento posterior. 8. Descrito na PEP 427
  3. Por que não egg? 1. O egg antecede os padrões

    empacotamento relacionados que temos hoje (PEP 376 e a PEP 426) 2. O Wheel implementa essas coisas. 3. Ele também fornece um arquivo convenção de nomenclatura melhor. 4. Ao contrário do .egg, o wheel será um padrão totalmente documentado no nível binário que é realmente fácil de instalar, mesmo se você não quiser usar a implementação de referência.
  4. Uso # Make sure you have the latest pip that

    supports wheel pip install --upgrade pip # Install wheel pip install wheel # Construir um diretório de "Wheels" para "django" e todas as suas dependências # pip wheel --wheel-dir=/tmp/wheelhouse django # Install from cached wheels pip install --use-wheel --no-index --find-links=/tmp/wheelhouse django
  5. Uso ( pip install --upgrade pip ) (wheel_test)[~]$ pip install

    --upgrade pip Downloading/unpacking pip from https://pypi.python.org/packages/source/p/pip/pip-1.4.1.tar.gz#md5=6afbb46aeb48abac658d4df742bff714 Downloading pip-1.4.1.tar.gz (445kB): 445kB downloaded Storing download in cache at ./.pip_download_cache/https%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fp%2Fpip%2Fpip-1.4.1.tar.gz Running setup.py egg_info for package pip warning: no files found matching '*.html' under directory 'docs' warning: no previously-included files matching '*.rst' found under directory 'docs/_build' no previously-included directories found matching 'docs/_build/_sources' Installing collected packages: pip Found existing installation: pip 1.3.1 Uninstalling pip: Successfully uninstalled pip Running setup.py install for pip warning: no files found matching '*.html' under directory 'docs' warning: no previously-included files matching '*.rst' found under directory 'docs/_build' no previously-included directories found matching 'docs/_build/_sources' Installing pip script to /home/znc/Envs/wheel_test/bin Installing pip-2.7 script to /home/znc/Envs/wheel_test/bin Successfully installed pip Cleaning up...
  6. Uso ( pip install --upgrade setuptools ) (wheel_test)[~]$ pip install

    --upgrade setuptools Downloading/unpacking setuptools from https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.tar. gz#md5=5710464bc5a61d75f5087f15ce63cfe0 Downloading setuptools-1.4.tar.gz (793kB): 793kB downloaded Storing download in cache at ./.pip_download_cache/https%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fs%2Fsetuptools% 2Fsetuptools-1.4.tar.gz Running setup.py egg_info for package setuptools Installing collected packages: setuptools Found existing installation: setuptools 0.6c11 Uninstalling setuptools: Successfully uninstalled setuptools Running setup.py install for setuptools Installing easy_install script to /home/znc/Envs/wheel_test/bin Installing easy_install-2.7 script to /home/znc/Envs/wheel_test/bin Successfully installed setuptools Cleaning up...
  7. Uso ( pip install wheel ) (wheel_test)[~]$ pip install wheel

    Downloading/unpacking wheel Downloading wheel-0.22.0.tar.gz Storing download in cache at ./.pip_download_cache/https%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fw%2Fwheel% 2Fwheel-0.22.0.tar.gz Running setup.py egg_info for package wheel no previously-included directories found matching 'wheel/test/*/dist' no previously-included directories found matching 'wheel/test/*/build' Installing collected packages: wheel Running setup.py install for wheel no previously-included directories found matching 'wheel/test/*/dist' no previously-included directories found matching 'wheel/test/*/build' Installing wheel script to /home/znc/Envs/wheel_test/bin Installing wininst2wheel script to /home/znc/Envs/wheel_test/bin Installing egg2wheel script to /home/znc/Envs/wheel_test/bin Successfully installed wheel Cleaning up...
  8. Uso ( pip wheel --wheel-dir=/tmp/wheelhouse django && pip freeze )

    (wheel_test)[~]$ pip wheel --wheel-dir=/tmp/wheelhouse django Downloading/unpacking django Downloading Django-1.6.tar.gz (6.6MB): 6.6MB downloaded Storing download in cache at ./.pip_download_cache/https%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2FD%2FDjango% 2FDjango-1.6.tar.gz Running setup.py egg_info for package django warning: no previously-included files matching '__pycache__' found under directory '*' warning: no previously-included files matching '*.py[co]' found under directory '*' Building wheels for collected packages: django Running setup.py bdist_wheel for django Destination directory: /tmp/wheelhouse Successfully built django Cleaning up... (wheel_test)[~]$ pip freeze argparse==1.2.1 wheel==0.22.0 wsgiref==0.1.2
  9. Uso ( pip install --use-wheel --no-index --find-links=/tmp/wheelhouse django && pip

    freeze ) (wheel_test)[~]$ pip install --use-wheel --no-index --find-links=/tmp/wheelhouse django Ignoring indexes: https://pypi.python.org/simple/ Downloading/unpacking django Installing collected packages: django Successfully installed django Cleaning up... (wheel_test)[~]$ pip freeze Django==1.6 argparse==1.2.1 wheel==0.22.0 wsgiref==0.1.2
  10. Uso ( pip install --use-wheel requests && pip freeze )

    (wheel_test)[~]$ pip install --use-wheel requests Downloading/unpacking requests Downloading requests-2.0.1-py2.py3-none-any.whl (439kB): 439kB downloaded Storing download in cache at ./.pip_download_cache/https%3A%2F%2Fpypi.python.org%2Fpackages%2F2.7%2Fr%2Frequests% 2Frequests-2.0.1-py2.py3-none-any.whl Installing collected packages: requests Successfully installed requests Cleaning up... (wheel_test)[~]$ pip freeze Django==1.6 argparse==1.2.1 requests==2.0.1 wheel==0.22.0 wsgiref==0.1.2
  11. Pacote Wheel | +- Django-1.6.dist-info | +- DESCRIPTION.rst | +-

    LICENSE.txt | +- METADATA | +- pydist.json | +- RECORD | +- top_level.txt | +- WHEEL +- Django-1.6.data | +- scripts | +- django-admin.py +- django
  12. Pacote Wheel (.dist-info) • METADATA: contêm informações sobre o software

    em si (como o nome do autor, classificadores, etc.) • pydist.json: mantém basicamente a mesma informaçãodo METADATA, mas formatado em JSON • WHEEL: contém informações semelhantes ao SOBRE, contando a ferramenta que deve trabalhar com este arquivo, qual a versão o formato e as plataformas que são suportados por ele. • RECORD: Contém uma entrada para cada arquivo no pacote e um sha256 para cada um. • top_level.txt: Este arquivo é uma lista de nomes de módulo ou pacote de nível superior oferecidos pelo projeto, com um identificador de Python por linha.
  13. Pacote Wheel (.data) • purelib: Se o wheel é um

    pacote Python puro, este deve conter todo o conteúdo do pacote • platlib: mesmo que acima, mas para pacotes dependentes de plataforma • headers: arquivo de cabeçalho, por exemplo, para extensões C • scripts: scripts executáveis • data: Os dados não-Python
  14. Referências 1. http://peak.telecommunity.com/DevCenter/PythonEggs 2. http://www.python.org/dev/peps/pep-0426/ 3. http://www.python.org/dev/peps/pep-0376/ 4. http://www.python.org/dev/peps/pep-0427/ 5.

    http://pythonwheels.com/ 6. https://pypi.python.org/pypi/wheel 7. http://wheel.readthedocs.org/en/latest/ 8. http://zerokspot.com/weblog/2013/09/29/weeklyresearch-python-wheel/