SORU
19 NİSAN 2011, Salı


Python ambalaj ve almak nasıl çalıştığı hakkında bazı kesin ışık tutabilir miyiz?

Vardı benim adil bir şans alma yoluyla python yönetim modülleri, ve her zaman bir meydan okuma: ambalaj değil ne insanlar, her gün olur ve bir yük için öğrenmek, ve yük, hatırlıyorum bile, gerçekte o zamandan beri bu durumda normalde bir kere.

Bu soru bu başlık altında olur ki bütün sihir için kesin açıklama olur, burada ithalat, paket yönetimi ve dağıtım python nasıl çalışır kesin bakış toplamak istiyorum. Ancak anladığım kadarıyla geniş düzeyde soru, bu işler bu kadar iç içe olan herhangi odaklı cevap vermeyecek çözmek temel sorun: anlamak nasıl çalışır, ne modası geçmiş, ne şimdiki, ne sadece alternatifler için aynı görev, Ne tuhaf.

Başvurmak için anahtar kelimelerin listesi aşağıdadır, ama bu grup dışında bir örnek sadece. Bir çok ek bilgi eklemek için bekliyoruz daha vardır.

  • PyPİ
  • setuptools Dağıtmak/
  • distutils
  • yumurta
  • yumurta-link
  • pip
  • zipimport
  • site.py
  • site-paketleri
  • .pth dosyaları
  • virtualenv
  • işleme yumurta derlenmiş modülleri (ve easy_install ile yükleme olmadan)
  • get_data()
  • pypm
  • bento
  • PEP 376
  • peynir dükkanı
  • eggsecutable

Diğer cevaplar için bağlama muhtemelen iyi bir fikirdir. Dediğim gibi, bu soruya üst düzey genel bakış.

CEVAP
28 NİSAN 2011, PERŞEMBE


Çoğunlukla, bu ambalaj/dağıtım tarafı, import mekanik değil bakmak için bir girişimdir. Ne yazık ki, ambalaj Python şekilde bunu yapmak için bir yol daha sağlar yerdir. Sadece top haddeleme almak için çalışıyorum, umarım Diğerleri özledim doldurun veya hata işaret eder.

Öncelikle biraz dağınık terminoloji var. Bir dizini __init__.py dosyası içeren bir paket. Ancak, en çok ne konuşuyoruz burada özel sürümleri paketler Yayın tarihi PyPİ, bir bu aynalar veya bir firmaya özel paket yönetim sistemi gibi Debian. Apt, Redhat ... Yum, Fink, Macports, Homebrew veya ActiveState. pypm.

Bu yayınlanan paketler Millet" ileri "" Python programlama dili olarak inşa sadece. Paketi kullanmak için bir girişim olacak "Dağıtımları olduğunu söylüyor nelerdir * PEP-376*50 bu kullanım bazılarını görebilirsiniz.

Şimdi, anahtar kelime listenizi Python Ekosistemi çok farklı yönleri ile ilgilidir:

Ve python dağıtımları bulgu yayıncılık

  • PyPİ (aka peynir dükkanı)
  • PyPİ Aynalar
  • Çeşitli paket yönetim araçları / sistemleri, yum, fink, macports, homebrew apt
  • pypm (PyPİ için ActiveState alternatif)

Yukarıda çeşitli biçimlerde Python dağıtımları yayımlamak için bir yer sağlamak hizmetleri. Bazıları, PyPİ aynalar ve apt / yum depoları gibi şirketler ağı içinde yerel makinede veya çalışan olabilir ama insanların çoğu resmi olanları kullanın. Çoğu, hepsi değilse de bir araç sağlamak (veya PyPİ durumunda birden fazla araç) ve dağılımları bul indir.

Kütüphaneler ve dağıtımları oluşturmak yüklemek için kullanılır:

  • setuptools / Dağıtmak
  • distutils

Distutils hangi Python paketleri ve dağılımları içine derlenmiş standart altyapı. distutils işlevsellik bir ton var ama çoğu sadece biliyorum:

from distutils.core import setup

setup(name='Distutils',
      version='1.0',
      description='Python Distribution Utilities',
      author='Greg Ward',
      author_email='gward@python.net',
      url='http://www.python.org/sigs/distutils-sig/',
      packages=['distutils', 'distutils.command'],
 )

Ve bir dereceye kadar da ihtiyacın olan bir en. Kodu önceden 9 çizgileri ile saf bir Python paketi ve minimal meta paket PyPİ bir dağıtım yayımlamak zorunda da yüklemek için yeterli bilgi var.

Setuptools kanca Yumurta biçimi ve onun özelliklerini ve zaaflarını tüm destek için gerekli sağlar. Dağıtmak çoğunlukla geriye doğru uyumlu olmaya çalışırken, bazı özellikler ekler Setuptools bir alternatiftir. Dağıtmak Distutil halefi from distutils.core import setup gibi Python 3 dahil olacak inanıyorum.

Setuptools ve Dağıtmak hem distutils Kur komutu özel bir sürümünü sağlar bu Yumurta biçimi desteği gibi yararlı şeyler yapar.

Python Dağıtım Biçimleri:

Dağıtımlar genellikle kaynak arşiv (tar veya zipfile) olarak verilmektedir. Kaynak dağıtım yüklemek için standart bir yol ve arşiv indirme genişleterek ve sonra içeri setup.py dosyasını çalıştırarak.

Örneğin, aşağıdaki indirmek, kurmak ve kütüphane vurgulayarak sözdizimi: Pygments kuracaktır

curl -O -G http://pypi.python.org/packages/source/P/Pygments/Pygments-1.4.tar.gz
tar -zxvf Pygments-1.4.tar.gz
cd Pygments-1.4
python setup.py build
sudo python setup.py install

Alternatif olarak Yumurta dosyayı indirin ve kurun. Genellikle bu easy_install veya pip kullanarak gerçekleştirilir:

sudo easy_install pygments
or 
sudo pip install pygments

Eggs Java Jarfiles esinlenilerek yapılmış here bu araştırılması gereken pek çok özellik var

Paket Python Biçimleri:

  • sıkıştırılmamış dizinleri
  • zipimport (zip sıkıştırılmış dizinler)

Normal bir python paketi sadece bir dizini __init__.py dosyası içeren ve ek modüller rastgele bir sayı veya alt paketleri. Python da *içinde kaynak kodunu bulmak için yükleme desteği vardır.dosyalarıPYTHONPATH üzerinde dahil oldukları sürece(sys.path)zip.

Python Paketleri Yükleme:

  • easy_install: orijinal yumurta Yükleme aracı setuptools bağlıdır
  • pip: python paketlerini yüklemek için şu anda en popüler yolu. easy_install benzer ama daha esnek ve belge bağımlılıkları yardım dağıtımları ve yeniden oluşturmak için gereksinimleri dosyaları gibi bazı güzel özelliklere sahiptir.
  • , *, yum, *apt24 fink, vb

Çevre Yönetim Otomatik Dağıtım/:

  • bento
  • buildout
  • virtualenv (virtualenvwrapper)

Yukarıdaki araçlar ve Python proje için bağımlılıkları otomatikleştirme yönetmenize yardımcı olmak için kullanılır. Temel olarak size uygulamanız gereken tarif ve bağımlılıklar bu özel sürümleri yüklemeyi otomatik hale getirmek için araçlar vermek.

Paketlerin yerleri Dağılımları/:

  • site-paketleri
  • PYTHONPATH
  • geçerli çalışma dizini (OS ve ortam ayarları bağlıdır)

Varsayılan olarak, python dağıtım kurulumu site-paketleri dizin içine düşecek. Bu dizin genellikle /usr/lib/pythonX.Y/site-packages gibi bir şeydir.

Basit programlı bir şekilde sitenizi paketleri dizinde bulmak için:

from distuils import sysconfig
print sysconfig.get_python_lib()

Yolu BİLİNÇLİ değiştirmek için:

Python alma bildirimi sadece dizinleri dahil PYTHONPATH bulunan paketler bulacaksınız.

İncelemek ve erişerek Python içinden yolunuzu değiştirebilirsiniz:

import sys
print sys.path
sys.path.append("/home/myname/lib")

Bunun yanı sıra, diğer çevre OS değişken senin gibi PYTHONPATH ortam değişkeni ayarlayabilirsiniz ya da kullanabilirsiniz:

  • .pth dosyaları: *.pth dosya zaten PYTHONPATH üzerinde olan dizinleri Yer Alan okuma ve *her satırı.pth dosya 38* *eklenir. Temelde PYTHONPATH bir dizine bir paket kopyalamak, herhangi bir zaman mypackages.pth bir oluşturabilirsiniz. *Hakkında daha fazla bilgi edinin.pth dosyaları: site module
  • yumurta-bağlantı dosyaları: Internal structure of python eggs sembolik bağlantılar için cross platform bir alternatiftir. Yumurta bir bağlantı dosyası oluşturma pth dosyası oluşturmaya benzer.
  • site.py değişiklikler

Yukarıdaki eklemek için 42* *site paketleri (*.pth *oluşturmak istediğiniz dosya.dosya pth. Dosyanın adı ama yine de belki mantıklı bir şey seçmelisiniz önemi yok.

Hadi myname.pth oluşturun:

# myname.pth
/home/myname/lib

İşte bu kadar. Sisteminizde sysconfig.get_python_lib() içine düşmesi ya da diğer herhangi bir dizin PYTHONPATH /home/myname/lib yol eklenecektir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BSA

    BSA

    9 NİSAN 2012
  • discokatze

    discokatze

    23 EYLÜL 2009
  • TechRax

    TechRax

    21 EYLÜL 2009