Python Modüllerini Yükleme (Eski sürüm)¶
- Yazar
Greg Ward
Ayrıca bkz.
- Installing Python Modules
Güncel modül kurulum belgeleri. Normal Python kullanımı için, neredeyse kesinlikle bu belgeden ziyade o belgeyi istersiniz.
Not
Bu belge yalnızca https://setuptools.readthedocs.io/en/latest/setuptools.html adresindeki setuptools
belgeleri burada bulunan ilgili tüm bilgileri bağımsız olarak kapsayana kadar saklanacaktır.
Not
Bu kılavuz yalnızca, Python’un bu sürümünün bir parçası olarak sağlanan uzantıları oluşturmaya ve dağıtmaya yönelik temel araçları kapsar. Üçüncü taraf araçlar, kullanımı daha kolay ve daha güvenli alternatifler sunar. Daha fazla bilgi için Python Paketleme Kullanıcı Kılavuzundaki hızlı öneriler bölümüne bakın.
Giriş¶
Python 2.0’da distutils
API’ı ilk olarak standart kitaplığa eklendi. Bu, Linux dağıtım yöneticilerine Python projelerini Linux dağıtım paketlerine dönüştürmenin standart bir yolunu ve sistem yöneticilerine bunları doğrudan hedef sistemlere yüklemenin standart bir yolunu sağladı.
Python 2.0’ın piyasaya sürülmesinden bu yana geçen uzun yıllardan bu yana, yapı sistemi ve paket yükleyiciyi dil çalışma zamanı sürüm döngüsüne sıkı bir şekilde bağlamak sorunlu hale geldi ve artık projelerin pip
paket yükleyicisini ve doğrudan distutils
kullanmak yerine setuptools
yapı sistemi.
Daha fazla ayrıntı için Installing Python Modules ve Python Modüllerini Dağıtma ‘e bakın.
Bu eski belgeler, yalnızca setuptools
belgelerinin gereken her şeyi kapsadığından emin olana kadar tutulur.
Distutils tabanlı kaynak dağıtımları¶
If you download a module source distribution, you can tell pretty quickly if it
was packaged and distributed in the standard way, i.e. using the Distutils.
First, the distribution’s name and version number will be featured prominently
in the name of the downloaded archive, e.g. foo-1.0.tar.gz
or
widget-0.9.7.zip
. Next, the archive will unpack into a similarly-named
directory: foo-1.0
or widget-0.9.7
. Additionally, the
distribution will contain a setup script setup.py
, and a file named
README.txt
or possibly just README
, which should explain that
building and installing the module distribution is a simple matter of running
one command from a terminal:
python setup.py install
Windows için bu komut bir komut istemi penceresinden çalıştırılmalıdır (
):setup.py install
Tüm bunlar doğruysa, yeni indirdiğiniz modülleri nasıl oluşturacağınızı ve kuracağınızı zaten biliyorsunuzdur: Yukarıdaki komutu çalıştırın. Standart olmayan bir şekilde bir şeyler kurmanız veya oluşturma sürecini özelleştirmeniz gerekmiyorsa, bu kılavuza gerçekten ihtiyacınız yoktur. Veya daha doğrusu, yukarıdaki komut, bu kılavuzdan çıkmanız için ihtiyacınız olan her şeydir.
Standart Derleme ve Yükleme¶
Distutils tabanlı kaynak dağıtımları bölümünde açıklandığı gibi, Distutils kullanarak bir modül dağıtımı oluşturmak ve kurmak genellikle bir terminalden çalıştırılacak basit bir komuttur:
python setup.py install
Platform varyasyonları¶
Kurulum komutunu her zaman dağıtım kök dizininden, yani modül kaynak dağıtımının paketini açtığı en üst düzey alt dizinden çalıştırmalısınız. Örneğin, bir Unix sistemine yeni bir kaynak dağıtımı foo-1.0.tar.gz
indirdiyseniz, yapmanız gereken normal şey:
gunzip -c foo-1.0.tar.gz | tar xf - # unpacks into directory foo-1.0
cd foo-1.0
python setup.py install
Windows’ta muhtemelen foo-1.0.zip
dosyasını indirirsiniz. Arşiv dosyasını C:\Temp
konumuna indirdiyseniz, paketinden C:\Temp\foo-1.0
; arşivi açmak için grafiksel kullanıcı arabirimli bir arşiv manipülatörü (WinZip gibi) veya bir komut satırı aracı (örneğin unzip veya pkunzip) kullanabilirsiniz. Ardından, bir komut istemi penceresi açın ve şunu çalıştırın:
cd c:\Temp\foo-1.0
python setup.py install
İşi bölmek¶
setup.py install
çalıştırıldığında, tüm modüller tek bir çalıştırmada oluşturulur ve kurulur. Kademeli olarak çalışmayı tercih ediyorsanız – özellikle oluşturma sürecini özelleştirmek istiyorsanız veya işler ters gidiyorsa kullanışlıdır – her seferinde bir şey yapmak için kurulum komut dosyasını kullanabilirsiniz. Bu, özellikle derleme ve yükleme farklı kullanıcılar tarafından yapılacaksa yararlıdır – örneğin, bir modül dağıtımı oluşturmak ve yükleme için bir sistem yöneticisine teslim etmek (veya süper kullanıcı ayrıcalıklarıyla kendiniz yapmak) isteyebilirsiniz. ).
Örneğin, her şeyi bir adımda oluşturabilir ve ardından kurulum komut dosyasını iki kez çağırarak her şeyi ikinci bir adımda yükleyebilirsiniz:
python setup.py build
python setup.py install
Bunu yaparsanız, install komutunu çalıştırmanın önce build komutunu çalıştırdığını fark edeceksiniz, bu komut –bu durumda –hızlı bir şekilde ilgisi olmadığını fark edecek, çünkü her şey build
dizini günceldir.
Tek yapmanız gereken ağdan indirilen modülleri kurmaksa, işleri parçalamak için bu yeteneğe ihtiyacınız olmayabilir, ancak daha gelişmiş görevler için çok kullanışlıdır. Kendi Python modüllerinizi ve uzantılarınızı dağıtmaya başlarsanız, birçok Distutils komutunu kendi başlarına çalıştıracaksınız.
Building nasıl çalışır¶
Yukarıda belirtildiği gibi, build komutu, kurulacak dosyaların bir build directory ye yerleştirilmesinden sorumludur. Varsayılan olarak, bu, dağıtım kökünün altındaki build
‘dir; Hızla aşırı derecede ilgileniyorsanız veya kaynak ağacı bozulmamış tutmak istiyorsanız, derleme dizinini --build-base
seçeneğiyle değiştirebilirsiniz. Örneğin:
python setup.py build --build-base=/path/to/pybuild/foo-1.0
(Ya da bunu sisteminizdeki veya kişisel Distutils yapılandırma dosyanızdaki bir yönerge ile kalıcı olarak yapabilirsiniz; bkz. bölüm Distutils Yapılandırma Dosyaları.) Normalde, bu gerekli değildir.
Derleme ağacının varsayılan düzeni aşağıdaki gibidir:
--- build/ --- lib/
or
--- build/ --- lib.<plat>/
temp.<plat>/
Burada “<plat>” mevcut işletim sistemi/donanım platformunun ve Python sürümünün kısa bir açıklamasına genişler. Yalnızca bir lib
dizini içeren ilk biçim, “saf modül dağıtımları” için kullanılır –yani, yalnızca salt Python modüllerini içeren modül dağıtımları. Bir modül dağıtımı herhangi bir uzantı içeriyorsa (C/C++ ile yazılmış modüller), o zaman iki <plat>
dizinli ikinci form kullanılır. Bu durumda, temp.plat
dizini, derleme/bağlantı işlemi tarafından oluşturulan ve aslında yüklenmeyen geçici dosyaları tutar. Her iki durumda da, lib
(veya lib.plat
) dizini, kurulacak tüm Python modüllerini (saf Python ve uzantıları) içerir.
Gelecekte, Python komut dosyalarını, belgeleri, ikili yürütülebilir dosyaları ve Python modüllerini ve uygulamalarını yükleme işini yürütmek için gereken diğer her şeyi işlemek için daha fazla dizin eklenecektir.
Kurulum nasıl çalışır¶
build komutu çalıştırıldıktan sonra (ister açık bir şekilde çalıştırın, ister install komutu sizin için yapar), install komutunun çalışması nispeten basittir: sahip olduğu tek şey yapılacak şey build/lib
(veya build/lib.plat
) altındaki her şeyi seçtiğiniz kurulum dizinine kopyalamaktır.
Bir kurulum dizini seçmezseniz – yani, sadece setup.py install
komutunu çalıştırırsanız – o zaman install komutu üçüncü taraf Python modülleri için standart konuma yüklenir . Bu konum, platforma ve Python’un kendisini nasıl oluşturduğunuza/kurduğunuza göre değişir. Unix’te (ve aynı zamanda Unix tabanlı olan macOS’ta), yüklenen modül dağıtımının saf Python olup olmadığına veya uzantılar (“non pürse”) içerip içermediğine de bağlıdır:
Platform |
Standart kurulum lokasyonu |
Varsayılan değer |
Notlar |
---|---|---|---|
Unix (pure) |
|
|
(1) |
Unix (non-pure) |
|
|
(1) |
Windows |
|
|
(2) |
Notlar:
Çoğu Linux dağıtımı Python’u sistemin standart bir parçası olarak içerir, bu nedenle
prefix
veexec-prefix
genellikle Linux’ta/usr
‘dır. Python’u Linux’ta (veya herhangi bir Unix benzeri sistemde) kendiniz kurarsanız, varsayılanprefix
veexec-prefix
/usr/local
şeklindedir.Windows’ta varsayılan kurulum dizini Python 1.6a1, 1.5.2 ve önceki sürümlerde
C:\Program Files\Python
idi.
prefix
ve exec-prefix
Python’un kurulu olduğu dizinleri ve çalışma zamanında kitaplıklarını nerede bulduğunu gösterir. Windows altında her zaman aynıdırlar ve çoğu zaman Unix ve macOS altında aynıdırlar. Python kurulumunuzun prefix
ve exec-prefix
için ne kullandığını Python’u etkileşimli modda çalıştırarak ve birkaç basit komut yazarak öğrenebilirsiniz. Unix altında, kabuk istemine python
yazmanız yeterlidir. Windows altında, öğesini seçin. Yorumlayıcı başlatıldığında, komut istemine Python kodunu yazarsınız. Örneğin, Linux sistemimde, prefix
ve exec-prefix
i bulmak için aşağıda gösterilen üç Python ifadesini yazıyorum ve gösterildiği gibi çıktı alıyorum:
Python 2.4 (#26, Aug 7 2004, 17:19:02)
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.prefix
'/usr'
>>> sys.exec_prefix
'/usr'
Bu belgede birkaç başka yer tutucu kullanılmıştır: X.Y
Python sürümünü temsil eder, örneğin 3.2
; abiflags
, sys.abiflags
değeri veya ABI bayrakları tanımlamayan platformlar için boş dize ile değiştirilecektir; distname
, kurulmakta olan modül dağıtımının adıyla değiştirilecektir. Yollarda noktalar ve büyük harf kullanımı önemlidir; örneğin, UNIX’te python3.2
‘yi kullanan bir değer, Windows’ta genellikle Python32
‘yi kullanır.
Modülleri standart konuma kurmak istemiyorsanız veya oraya yazma izniniz yoksa, alternatif kurulumlar hakkında Alternatif Kurulum bölümünde okumanız gerekir. Kurulum dizinlerinizi daha yoğun bir şekilde özelleştirmek istiyorsanız, özel kurulumlarla ilgili Özel Kurulum bölümüne bakın.
Alternatif Kurulum¶
Çoğu zaman, modüllerin üçüncü taraf Python modülleri için standart konumdan farklı bir konuma kurulması gerekli veya istenir. Örneğin, bir Unix sisteminde standart üçüncü taraf modül dizinine yazma izniniz olmayabilir. Veya bir modülü yerel Python kurulumunuzun standart bir parçası yapmadan önce denemek isteyebilirsiniz. Bu özellikle halihazırda mevcut olan bir dağıtımı yükseltirken geçerlidir: gerçekten yükseltmeden önce mevcut komut dosyası tabanınızın yeni sürümle hala çalıştığından emin olmak istersiniz.
Distutils install komutu, modül dağıtımlarını alternatif bir konuma yüklemeyi basit ve zahmetsiz hale getirmek için tasarlanmıştır. Temel fikir, kurulum için bir temel dizin sağlamanız ve install komutunun, dosyaların kurulacağı bu temel dizin altında bir dizi dizini (installation scheme olarak adlandırılır) seçmesidir. Ayrıntılar platformlar arasında farklılık gösterir, bu nedenle aşağıdaki bölümlerden hangisi size uyuyorsa onu okuyun.
Çeşitli alternatif kurulum şemalarının birbirini dışladığını unutmayın: --user
veya --home
veya --prefix
ve --exec-prefix
iletebilirsiniz, veya --install-base
ve --install-platbase
, ancak bu gruplardan karıştıramazsınız.
Alternatif kurulum: kullanıcı şeması¶
Bu şema, global site paketleri dizinine yazma izni olmayan veya içine yüklemek istemeyen kullanıcılar için en uygun çözüm olacak şekilde tasarlanmıştır. Basit bir seçenekle etkinleştirilir:
python setup.py install --user
Dosyalar site.USER_BASE
(bundan sonra userbase
şeklinde yazılacaktır) alt dizinlerine kurulacaktır. Bu şema, saf Python modüllerini ve uzantı modüllerini aynı konuma kurar (ayrıca site.USER_SITE
olarak da bilinir). İşte macOS dahil UNIX değerleri:
Dosya tipi |
Kurulum dizini |
---|---|
Modüller |
|
scriptler |
|
Data |
|
C başlıkları |
|
Windows’ta kullanılan değerler:
Dosya tipi |
Kurulum dizini |
---|---|
Modüller |
|
scriptler |
|
Data |
|
C başlıkları |
|
Aşağıda açıklanan diğerlerine kıyasla bu şemayı kullanmanın avantajı, normal koşullar altında kullanıcı site paketleri dizininin her zaman sys.path
(daha fazla bilgi için site
bölümüne bakın) içinde bulunmasıdır. bu, kurulumu tamamlamak için setup.py
betiğini çalıştırdıktan sonra gerçekleştirilecek ek bir adım olmadığı anlamına gelir.
build_ext komutu ayrıca başlık dosyaları ve userbase/lib
için derleyici arama yoluna userbase/include
eklemek için bir --user
seçeneğine sahiptir. kitaplıklar için derleyici arama yolunun yanı sıra paylaşılan C kitaplıkları (rpath) için çalışma zamanı arama yoluna.
Alternatif kurulum: ev şeması¶
“Ev planı”nın arkasındaki fikir, Python modüllerinin kişisel bir zulasını oluşturmanız ve sürdürmenizdir. Bu şemanın adı, Unix’teki bir “ev” dizini fikrinden türetilmiştir, çünkü bir Unix kullanıcısının ev dizininin /usr/
veya /usr'ye benzer bir düzene sahip olması alışılmadık bir durum değildir. /yerel/
. Bu şema, yükledikleri işletim sistemi ne olursa olsun herkes tarafından kullanılabilir.
Yeni bir modül dağıtımı kurmak şu kadar basittir
python setup.py install --home=<dir>
burada --home
seçeneği için istediğiniz dizini sağlayabilirsiniz. Unix’te tembel daktilo yazarları yalnızca bir yaklaşık işareti (~
) yazabilir; install komutu bunu ana dizininize genişletecektir:
python setup.py install --home=~
Python’un bu şema ile kurulu dağıtımları bulmasını sağlamak için, modify Python’s search path değiştirmeniz veya aramak için sitecustomize
(bkz. site
) düzenlemeniz gerekebilir. site.addsitedir()
veya sys.path
düzenleyin.
--home
seçeneği, kurulum temel dizinini tanımlar. Dosyalar, kurulum tabanının altındaki aşağıdaki dizinlere aşağıdaki şekilde kurulur:
Dosya tipi |
Kurulum dizini |
---|---|
Modüller |
|
scriptler |
|
Data |
|
C başlıkları |
|
(Windows kullanıyorsanız, eğik çizgileri zihinsel olarak ters eğik çizgiyle değiştirin.)
Alternatif kurulum: Unix (ön ek (prefix) şeması)¶
“Prefix şeması”, oluşturma/kurulum işlemini gerçekleştirmek için (yani kurulum komut dosyasını çalıştırmak için) bir Python kurulumu kullanmak istediğinizde, ancak modülleri farklı bir Python kurulumunun (veya farklı bir Python kurulumuna benziyor). Bu kulağa biraz olağandışı geliyorsa, bu–kullanıcı ve ev şemalarının önce gelmesinin nedeni budur. Bununla birlikte, prefix şemasının yararlı olacağı bilinen en az iki durum vardır.
İlk olarak, birçok Linux dağıtımının Python’u daha geleneksel /usr/local
yerine /usr
içine koyduğunu düşünün. Bu tamamen uygundur, çünkü bu durumlarda Python yerel bir eklentiden ziyade “sistemin” bir parçasıdır. Ancak, Python modüllerini kaynaktan kuruyorsanız, muhtemelen bunların /usr/lib/python2 yerine :file:
/usr/local/lib/python2.{X}` içine girmesini istersiniz.{X }`. Bu :: ile yapılabilir.
/usr/bin/python setup.py install --prefix=/usr/local
Başka bir olasılık, uzak bir dizine yazmak için kullanılan adın onu okumak için kullanılan addan farklı olduğu bir ağ dosya sistemidir: örneğin, /usr/local/bin/python
olarak erişilen Python yorumlayıcısı için arama yapabilir. modüller /usr/local/lib/python2.X
dizinindedir, ancak bu modüllerin örneğin /mnt/@server/export/lib/python2 konumuna yüklenmesi gerekir. X
. Bu :: ile yapılabilir.
/usr/local/bin/python setup.py install --prefix=/mnt/@server/export
Her iki durumda da, --prefix
seçeneği kurulum tabanını tanımlar ve --exec-prefix
seçeneği platforma özel dosyalar için kullanılan platforma özel kurulum tabanını tanımlar. . (Şu anda, bu yalnızca saf olmayan modül dağıtımları anlamına gelir, ancak C kitaplıklarına, ikili yürütülebilir dosyalara vb. genişletilebilir.) --exec-prefix
sağlanmazsa, varsayılan olarak --prefix
. Dosyalar aşağıdaki gibi yüklenir:
Dosya tipi |
Kurulum dizini |
---|---|
Python modülleri |
|
extension (uzatma) modülleri |
|
scriptler |
|
Data |
|
C başlıkları |
|
--prefix
veya --exec-prefix
‘in aslında alternatif bir Python kurulumuna işaret etmesi gerekliliği yoktur; yukarıda listelenen dizinler zaten mevcut değilse, kurulum sırasında oluşturulurlar.
Bu arada, önek şemasının önemli olmasının gerçek nedeni, standart bir Unix kurulumunun örnek şemasını kullanmasıdır, ancak --prefix
ve --exec-prefix
Python’un kendisi tarafından sağlanır. sys.prefix
ve sys.exec_prefix
. Bu nedenle, önek şemasını asla kullanmayacağınızı düşünebilirsiniz, ancak python setup.py install
dosyasını başka bir seçenek olmadan her çalıştırdığınızda, onu kullanıyorsunuz.
Alternatif bir Python kurulumuna uzantı yüklemenin, bu uzantıların nasıl oluşturulduğu üzerinde hiçbir etkisi olmadığını unutmayın: özellikle, kurulum komut dosyasını çalıştırmak için kullanılan Python yorumlayıcısı ile yüklenen Python başlık dosyaları (Python.h
ve arkadaşları) uzantıların derlenmesinde kullanılabilir. Bu şekilde yüklenen uzantıları çalıştırmak için kullanılan yorumlayıcının, bunları oluşturmak için kullanılan yorumlayıcıyla uyumlu olmasını sağlamak sizin sorumluluğunuzdadır. Bunu yapmanın en iyi yolu, iki yorumlayıcının aynı Python sürümü (muhtemelen farklı yapılar veya muhtemelen aynı yapının kopyaları) olduğundan emin olmaktır. (Elbette, --prefix
ve --exec-prefix
öğeleriniz alternatif bir Python kurulumuna işaret etmiyorsa, bu önemsizdir.)
Alternatif kurulum: Windows (ön ek şeması)¶
Windows’ta bir kullanıcının ev dizini kavramı yoktur ve Windows altında standart Python kurulumu Unix’e göre daha basit olduğundan, --prefix
seçeneği geleneksel olarak Windows’ta ayrı konumlara ek paketler kurmak için kullanılmıştır.
python setup.py install --prefix="\Temp\Python"
modülleri geçerli sürücüdeki \Temp\Python
dizinine kurmak için.
Kurulum tabanı --prefix
seçeneği ile tanımlanır; --exec-prefix
seçeneği Windows’ta desteklenmez, bu da saf Python modüllerinin ve genişletme modüllerinin aynı konuma kurulu olduğu anlamına gelir. Dosyalar aşağıdaki gibi yüklenir:
Dosya tipi |
Kurulum dizini |
---|---|
Modüller |
|
scriptler |
|
Data |
|
C başlıkları |
|
Özel Kurulum¶
Bazen, Alternatif Kurulum bölümünde açıklanan alternatif kurulum şemaları istediğinizi yapmaz. Her şeyi aynı temel dizin altında tutarken yalnızca bir veya iki dizinde ince ayar yapmak veya kurulum şemasını tamamen yeniden tanımlamak isteyebilirsiniz. Her iki durumda da özel bir yükleme şeması oluşturuyorsunuz.
Özel bir kurulum şeması oluşturmak için, alternatif şemalardan biriyle başlarsınız ve aşağıdaki seçenekleri kullanarak çeşitli dosya türleri için kullanılan bazı kurulum dizinlerini geçersiz kılarsınız:
Dosya tipi |
Geçersiz kılma seçeneği |
---|---|
Python modülleri |
|
extension (uzatma) modülleri |
|
Tüm modüller |
|
scriptler |
|
Data |
|
C başlıkları |
|
Bu geçersiz kılma seçenekleri göreli, mutlak veya kurulum temel dizinlerinden biri açısından açıkça tanımlanmış olabilir. (İki kurulum temel dizini vardır ve bunlar normalde aynıdır – yalnızca Unix “ön ek şeması” kullandığınızda ve farklı --prefix
ve --exec-prefix
seçenekleri sağladığınızda farklılık gösterirler; --install-lib
kullanmak, --install-purelib
ve --install-platlib
için hesaplanan veya verilen değerleri geçersiz kılar ve fark yaratmayan şemalar için Python ve uzatma modülleri arasında önerilir.)
Örneğin, Unix altında ana dizininize bir modül dağıtımı kurduğunuzu, ancak komut dosyalarının ~/bin
yerine ~/scripts
içine girmesini istediğinizi varsayalım. Tahmin edebileceğiniz gibi, bu dizini --install-scripts
seçeneği ile geçersiz kılabilirsiniz; bu durumda, kurulum temel dizinine (bu durumda ana dizininiz) göre yorumlanacak olan bir göreli yol sağlamak en mantıklısı olur:
python setup.py install --home=~ --install-scripts=scripts
Başka bir Unix örneği: Python kurulumunuzun /usr/local/python
ön ekiyle oluşturulduğunu ve kurulduğunu varsayalım, bu nedenle standart bir kurulum komut dosyaları altında /usr/local/python/bin
olarak kurulacaktır. Bunların yerine /usr/local/bin
içinde olmasını istiyorsanız, --install-scripts
seçeneği için bu mutlak dizini sağlarsınız:
python setup.py install --install-scripts=/usr/local/bin
(Bu, “ön ek şemasını” kullanarak bir yükleme gerçekleştirir; burada önek, bu durumda Python yorumlayıcınız– /usr/local/python
ile birlikte yüklenir.)
Python’u Windows’ta kullanıyorsanız, üçüncü taraf modüllerin doğrudan prefix
içinde değil, prefix
alt dizininde yaşamasını isteyebilirsiniz. Bu neredeyse komut dosyası yükleme dizinini özelleştirmek kadar kolaydır – endişelenmeniz gereken iki tür modül olduğunu hatırlamanız yeterlidir: Python ve genişletme modülleri, her ikisi de tek bir seçenekle kolayca kontrol edilebilir:
python setup.py install --install-lib=Site
Belirtilen kurulum dizini prefix
ile ilişkilidir. Elbette, örneğin bir site dizinine bir .pth
dosyası koyarak (bkz. site
) bu dizinin Python’un modül arama yolunda olduğundan emin olmalısınız. Python’un arama yolunu nasıl değiştireceğinizi öğrenmek için Python’un Arama Yolunu Değiştirme bölümüne bakın.
Tüm bir kurulum şemasını tanımlamak istiyorsanız, tüm kurulum dizini seçeneklerini sağlamanız yeterlidir. Bunu yapmanın önerilen yolu, göreli yollar sağlamaktır; örneğin, Python modülü ile ilgili tüm dosyaları ana dizininizde python
altında tutmak istiyorsanız ve ana dizininizi kullandığınız her platform için ayrı bir dizin istiyorsanız, aşağıdaki kurulum şemasını tanımlayabilirsiniz.
python setup.py install --home=~ \
--install-purelib=python/lib \
--install-platlib=python/lib.$PLAT \
--install-scripts=python/scripts
--install-data=python/data
Veya eşdeğer olarak,
python setup.py install --home=~/python \
--install-purelib=lib \
--install-platlib='lib.$PLAT' \
--install-scripts=scripts
--install-data=data
$PLAT
(zorunlu olarak) bir ortam değişkeni değildir – yapılandırma dosya(lar)ınızı ayrıştırırken yaptığı gibi, komut satırı seçeneklerinizi ayrıştırırken Distutils tarafından genişletilecektir.
Açıkçası, her yeni modül dağıtımı kurduğunuzda tüm kurulum şemasını belirtmek çok sıkıcı olacaktır. Böylece, bu seçenekleri Distutils yapılandırma dosyanıza koyabilirsiniz (bkz. Distutils Yapılandırma Dosyaları bölümü):
[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-data=python/data
Veya eşdeğer olarak,
[install]
install-base=$HOME/python
install-purelib=lib
install-platlib=lib.$PLAT
install-scripts=scripts
install-data=data
Kurulum komut dosyasını çalıştırırken farklı bir kurulum temel dizini sağlarsanız, bu ikisinin eşdeğer değil olduğunu unutmayın. Örneğin,
python setup.py install --install-base=/tmp
saf modülleri ilk durumda /tmp/python/lib
dizinine ve ikinci durumda /tmp/lib
dizinine kurardı. (İkinci durum için, muhtemelen bir /tmp/python
kurulum tabanı sağlamak istersiniz.)
Örnek yapılandırma dosyası girişinde $HOME
ve $PLAT
kullanıldığını muhtemelen fark etmişsinizdir. Bunlar, ortam değişkenlerine güçlü bir benzerlik gösteren Distutils yapılandırma değişkenleridir. Aslında, ortam değişkenlerini böyle bir kavramı olan platformlarda yapılandırma dosyalarında kullanabilirsiniz, ancak Distutils ek olarak $PLAT
gibi ortamınızda olmayabilecek birkaç ekstra değişken tanımlar. Ve elbette, Mac OS 9 gibi ortam değişkenlerine sahip olmayan sistemlerde, yalnızca Distutils tarafından sağlanan yapılandırma değişkenlerini kullanabilirsiniz. Bkz. Distutils Yapılandırma Dosyaları.
Not
Bir virtual environment etkinleştirildiğinde, projelerin yanlışlıkla sanal ortamın dışına kurulmasını önlemek için kurulum yolunu değiştiren tüm seçenekler tüm distutils yapılandırma dosyalarından yok sayılır.
Python’un Arama Yolunu Değiştirme¶
Python yorumlayıcısı bir import
ifadesini çalıştırdığında, bir arama yolu boyunca hem Python kodunu hem de uzantı modüllerini arar. Yorumlayıcı oluşturulduğunda, yol için varsayılan bir değer Python ikili dosyasında yapılandırılır. sys
modülünü içe aktararak ve sys.path
değerini yazdırarak yolu belirleyebilirsiniz.
$ python
Python 2.2 (#11, Oct 3 2002, 13:31:27)
[GCC 2.96 20000731 (Red Hat Linux 7.3 2.96-112)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-linux2',
'/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload',
'/usr/local/lib/python2.3/site-packages']
>>>
sys.path
içindeki boş dize, geçerli çalışma dizinini temsil eder.
Yerel olarak kurulmuş paketler için beklenen kural, onları …/site-packages/
dizinine koymaktır, ancak Python modüllerini rastgele bir dizine kurmak isteyebilirsiniz. Örneğin, sitenizin web sunucusuyla ilgili tüm yazılımları /www
altında tutma kuralı olabilir. Eklenti Python modülleri daha sonra /www/python
klasörüne ait olabilir ve bunları içe aktarmak için bu dizinin sys.path
klasörüne eklenmesi gerekir. Dizini eklemenin birkaç farklı yolu vardır.
En uygun yol, zaten Python’un yolunda bulunan bir dizine, genellikle …/site-packages/
dizinine bir yol yapılandırma dosyası eklemektir. Yol yapılandırma dosyalarının uzantısı .pth
‘dir ve her satırda sys.path
dosyasına eklenecek tek bir yol bulunmalıdır. (Yeni yollar sys.path
dizinine eklendiğinden, eklenen dizinlerdeki modüller standart modülleri geçersiz kılmaz. Bu, standart modüllerin sabit sürümlerini kurmak için bu mekanizmayı kullanamayacağınız anlamına gelir.)
Yollar mutlak veya göreli olabilir, bu durumda .pth
dosyasını içeren dizine göredirler. Daha fazla bilgi için site
modülünün belgelerine bakın.
Biraz daha az kullanışlı bir yol, Python’un standart kitaplığındaki site.py
dosyasını düzenlemek ve sys.path
değiştirmektir. Bu davranışı bastırmak için -S
anahtarı sağlanmadıkça, Python yorumlayıcısı çalıştırıldığında site.py
otomatik olarak içe aktarılır. Böylece site.py
dosyasını düzenleyebilir ve ona iki satır ekleyebilirsiniz:
import sys
sys.path.append('/www/python/')
Ancak, Python’un aynı ana sürümünü yeniden yüklerseniz (örneğin, 2.2’den 2.2.2’ye yükseltme yaparken) site.py
stok sürümü tarafından üzerine yazılır. Kurulumu yapmadan önce değiştirildiğini hatırlamanız ve bir kopyasını kaydetmeniz gerekir.
sys.path
değiştirebilen iki ortam değişkeni vardır. PYTHONHOME
Python kurulumunun öneki için alternatif bir değer ayarlar. Örneğin, PYTHONHOME
, /www/python
olarak ayarlanırsa, arama yolu ['', '/www/python/lib/pythonX.Y/', '/www/python/lib/pythonX.Y/plat-linux2', ...]
olarak ayarlanır.
PYTHONPATH
değişkeni, sys.path
başına eklenecek bir yol listesine ayarlanabilir. Örneğin, PYTHONPATH
, /www/python:/opt/py
olarak ayarlanırsa, arama yolu ['/www/python', '/opt/py']
ile başlar. (sys.path
klasörüne eklenmek için dizinlerin var olması gerektiğini unutmayın; site
modülü var olmayan yolları kaldırır.)
Son olarak, sys.path
sadece normal bir Python listesidir, bu nedenle herhangi bir Python uygulaması, girdiler ekleyerek veya çıkararak onu değiştirebilir.
Distutils Yapılandırma Dosyaları¶
Yukarıda bahsedildiği gibi, herhangi bir Distutils seçeneği için kişisel veya site tercihlerini kaydetmek için Distutils konfigürasyon dosyalarını kullanabilirsiniz. Yani, herhangi bir komutun herhangi bir seçeneği, komut satırı ayrıştırılmadan önce danışılacak olan (platformunuza bağlı olarak) iki veya üç yapılandırma dosyasından birinde saklanabilir. Bu, yapılandırma dosyalarının varsayılan değerleri geçersiz kılacağı ve komut satırının da yapılandırma dosyalarını geçersiz kılacağı anlamına gelir. Ayrıca, birden fazla yapılandırma dosyası geçerliyse, “önceki” dosyalardan alınan değerler “sonraki” dosyalar tarafından geçersiz kılınır.
Yapılandırma dosyalarının konumu ve adları¶
Yapılandırma dosyalarının adları ve konumları platformlar arasında biraz farklılık gösterir. Unix ve macOS’ta üç yapılandırma dosyası (işlendikleri sırayla):
Dosya tipi |
Konum ve dosya adı |
Notlar |
---|---|---|
system |
|
(1) |
personal |
|
(2) |
local |
|
(3) |
Ve Windows’ta yapılandırma dosyaları şunlardır:
Dosya tipi |
Konum ve dosya adı |
Notlar |
---|---|---|
system |
|
(4) |
personal |
|
(5) |
local |
|
(3) |
On all platforms, the “personal” file can be temporarily disabled by passing the –no-user-cfg option.
Notlar:
Kesin olarak söylemek gerekirse, sistem genelindeki yapılandırma dosyası Distutils’in kurulu olduğu dizinde bulunur; Python 1.6 altında ve daha sonra Unix’te bu gösterildiği gibidir. Python 1.5.2 için, Distutils normalde
prefix/lib/python1.5/site-packages/distutils
konumuna yüklenecektir, bu nedenle sistem yapılandırma dosyası oraya Python 1.5.2 altına yerleştirilmelidir.Unix’te,
HOME
ortam değişkeni tanımlı değilse, kullanıcının ana dizini standartpwd
modülündengetpwuid()
işleviyle belirlenir. Bu, Distutils tarafından kullanılanos.path.expanduser()
işlevi tarafından yapılır.Yani, geçerli dizinde (genellikle kurulum komut dosyasının konumu).
(Ayrıca not (1)’e bakın.) Python 1.6 ve sonraki sürümlerde, Python’un varsayılan “kurulum öneki”
C:\Python
şeklindedir, bu nedenle sistem yapılandırma dosyası normaldeC:\Pythonşeklindedir. Lib\distutils\distutils.cfg
. Python 1.5.2 altında, varsayılan önekC:\Program Files\Python
idi ve Distutils standart kitaplığın parçası değildi – bu nedenle sistem yapılandırma dosyasıC olacaktır. :\Program Files\Python\distutils\distutils.cfg
Windows altında standart bir Python 1.5.2 kurulumunda.Windows’ta,
HOME
ortam değişkeni tanımlı değilse,USERPROFILE
HOMEDRIVE
veHOMEPATH
denenecektir. Bu, Distutils tarafından kullanılanos.path.expanduser()
işlevi tarafından yapılır.
Yapılandırma dosyalarının Syntax’ı (sözdizimi)¶
Distutils yapılandırma dosyalarının tümü aynı Syntax’a sahiptir. Yapılandırma dosyaları bölümlere ayrılmıştır. Her Distutils komutu için bir bölüm ve ayrıca her komutu etkileyen genel seçenekler için bir “genel” bölüm vardır. Her bölüm, satır başına seçenek=değer
olarak belirtilen bir seçenekten oluşur.
Örneğin, aşağıdaki, tüm komutları varsayılan olarak sessizce çalışmaya zorlayan eksiksiz bir yapılandırma dosyasıdır:
[global]
verbose=0
Bu, sistem yapılandırma dosyası olarak kurulursa, mevcut sistemdeki herhangi bir kullanıcı tarafından herhangi bir Python modülü dağıtımının tüm işlemlerini etkileyecektir. Kişisel yapılandırma dosyanız olarak kurulursa (onları destekleyen sistemlerde), yalnızca sizin tarafınızdan işlenen modül dağıtımlarını etkiler. Ve belirli bir modül dağıtımı için setup.cfg
olarak kullanılırsa, yalnızca bu dağıtımı etkiler.
Varsayılan “temel oluşturma” dizinini geçersiz kılabilir ve build* komutlarını aşağıdakilerle tüm dosyaları her zaman zorla yeniden oluşturabilirsiniz:
[build]
build-base=blib
force=1
hangi komut satırı argümanlarına karşılık gelir
python setup.py build --build-base=blib --force
build komutunun komut satırına eklenmesi, komutun çalıştırılacağı anlamına gelir. Yapılandırma dosyalarına belirli bir komutu dahil etmenin böyle bir anlamı yoktur; bu yalnızca komut çalıştırılırsa yapılandırma dosyasındaki seçeneklerin uygulanacağı anlamına gelir. (Ya da ondan değer türeten başka komutlar çalıştırılırsa, yapılandırma dosyasındaki değerleri kullanırlar.)
--help
seçeneğini kullanarak herhangi bir komut için seçeneklerin tam listesini bulabilirsiniz, ör.:
python setup.py build --help
ve komut olmadan --help
kullanarak global seçeneklerin tam listesini bulabilirsiniz:
python setup.py --help
Ayrıca “Python Modüllerini Dağıtma” kılavuzunun “Referans” bölümüne bakın.
Bina Uzantıları: İpuçları ve Püf Noktaları¶
Mümkün olduğunda, Distutils, setup.py
komut dosyasını çalıştırmak için kullanılan Python yorumlayıcısı tarafından sağlanan yapılandırma bilgilerini kullanmaya çalışır. Örneğin, Python’u derlemek için kullanılan aynı derleyici ve bağlayıcı bayrakları, uzantıları derlemek için de kullanılacaktır. Genellikle bu iyi çalışır, ancak karmaşık durumlarda bu uygun olmayabilir. Bu bölüm, olağan Distutils davranışının nasıl geçersiz kılınacağını tartışır.
Derleyici/bağlayıcı bayraklarında ince ayar yapma¶
C veya C++ ile yazılmış bir Python uzantısını derlemek, bazen belirli bir kitaplığı kullanmak veya özel bir tür nesne kodu üretmek için derleyici ve bağlayıcı için özel bayraklar belirtmeyi gerektirir. Bu, özellikle uzantı platformunuzda test edilmemişse veya Python’u çapraz derlemeye çalışıyorsanız geçerlidir.
En genel durumda, uzantı yazarı, uzantıları derlemenin karmaşık olacağını öngörmüş ve düzenlemeniz için bir Setup
dosyası sağlamış olabilir. Bu muhtemelen yalnızca modül dağıtımı birçok ayrı genişletme modülü içeriyorsa veya çalışmak için genellikle ayrıntılı derleyici bayrakları gerektiriyorsa yapılacaktır.
Bir Setup
dosyası varsa, oluşturulacak uzantıların bir listesini almak için ayrıştırılır. Setup
içindeki her satır tek bir modülü tanımlar. Hatlar aşağıdaki yapıya sahiptir:
module ... [sourcefile ...] [cpparg ...] [library ...]
Alanların her birini sırayla inceleyelim.
module, oluşturulacak uzantı modülünün adıdır ve geçerli bir Python tanımlayıcısı olmalıdır. Bunu sadece bir modülü yeniden adlandırmak için değiştiremezsiniz (kaynak kodunda da düzenlemeler yapılması gerekir), bu yüzden bu yalnız bırakılmalıdır.
sourcefile, en azından dosya adına bakılırsa, kaynak kod dosyası olması muhtemel herhangi bir şeydir.
.c
ile biten dosya adlarının C ile yazıldığı,.C
,.cc
ve.c++
ile biten dosya adlarının C++ olduğu varsayılır. ve.m
veya.mm
ile biten dosya adlarının Amaç C’de olduğu varsayılır.cpparg, C önişlemcisi için bir argümandır ve
-I
,-D
,-U
veya-C
ile başlayan herhangi bir şeydir.library is anything ending in
.a
or beginning with-l
or-L
.
Belirli bir platform, platformunuzda özel bir kitaplık gerektiriyorsa, bunu Setup
dosyasını düzenleyerek ve python setup.py build
çalıştırarak ekleyebilirsiniz. Örneğin, modül :: satırı ile tanımlanırsa
foo foomodule.c
platformunuzdaki matematik kitaplığı libm.a
ile bağlantılı olmalıdır, sadece -lm
satırına ekleyin:
foo foomodule.c -lm
Derleyici veya bağlayıcıya yönelik keyfi anahtarlar -Xcompiler
arg ve -Xlinker
arg seçenekleriyle sağlanabilir:
foo foomodule.c -Xcompiler -o32 -Xlinker -shared -lm
-Xcompiler
ve -Xlinker
‘dan sonraki sonraki seçenek uygun komut satırına eklenecektir, bu nedenle yukarıdaki örnekte derleyiciye -o32
seçeneği geçilecektir. , ve bağlayıcı geçirilir -shared
. Derleyici seçeneği bir argüman gerektiriyorsa, birden çok -Xcompiler
seçeneği sağlamanız gerekir; örneğin, -x c++
geçmek için Setup
dosyasının -Xcompiler -x -Xcompiler c++
içermesi gerekir.
Derleyici bayrakları, CFLAGS
ortam değişkeni ayarlanarak da sağlanabilir. Ayarlanırsa, CFLAGS
içeriği Setup
dosyasında belirtilen derleyici bayraklarına eklenecektir.
Windows’ta Microsoft’a ait olmayan derleyicileri kullanma¶
Borland/CodeGear C++¶
This subsection describes the necessary steps to use Distutils with the Borland
C++ compiler version 5.5. First you have to know that Borland’s object file
format (OMF) is different from the format used by the Python version you can
download from the Python or ActiveState Web site. (Python is built with
Microsoft Visual C++, which uses COFF as the object file format.) For this
reason you have to convert Python’s library python25.lib
into the
Borland format. You can do this as follows:
coff2omf python25.lib python25_bcpp.lib
coff2omf
programı Borland derleyicisiyle birlikte gelir. python25.lib
dosyası, Python kurulumunuzun Libs
dizinindedir. Uzantınız başka kitaplıklar (zlib, …) kullanıyorsa, onları da dönüştürmeniz gerekir.
Dönüştürülen dosyalar, normal kitaplıklarla aynı dizinlerde bulunmalıdır.
Distutils, bu kitaplıkları değişen adlarıyla kullanmayı nasıl başarıyor? Uzantının bir kitaplığa ihtiyacı varsa (örn. foo
) Distutils önce _bcpp
(örn. foo_bcpp.lib
) sonekine sahip bir kitaplık bulup bulmadığını kontrol eder ve ardından bu kitaplığı kullanır. Böyle özel bir kitaplık bulamazsa, varsayılan adı kullanır (foo.lib
.) 1
Distutils’in uzantınızı Borland C++ ile derlemesine izin vermek için şimdi şunu yazmanız gerekir:
python setup.py build --compiler=bcpp
Borland C++ derleyicisini varsayılan olarak kullanmak istiyorsanız, bunu Distutils için kişisel veya sistem genelindeki yapılandırma dosyanızda belirtebilirsiniz (bkz. Distutils Yapılandırma Dosyaları.)
Ayrıca bkz.
- C++Builder Compiler
İndirme sayfalarına bağlantılar da dahil olmak üzere Borland’ın ücretsiz C++ derleyicisi hakkında bilgiler.
- Borland’ın Ücretsiz Derleyicisini Kullanarak Python Uzantıları Oluşturma
Python’u oluşturmak için Borland’ın ücretsiz komut satırı C++ derleyicisinin nasıl kullanılacağını açıklayan belge.
GNU C / Cygwin / MinGW¶
Bu bölüm, Distutils’i GNU C/C++ derleyicileriyle Cygwin ve MinGW dağıtımlarında kullanmak için gerekli adımları açıklar. 2 Cygwin ile oluşturulmuş bir Python yorumlayıcısı için, aşağıdaki adımlardan herhangi biri olmadan her şey çalışmalıdır.
Tüm uzantılar MinGW veya Cygwin ile oluşturulamaz, ancak çoğu yapılabilir. Çalışmama olasılığı en yüksek olan uzantılar, C++ kullanan veya Microsoft Visual C uzantılarına bağlı olanlardır.
Distutils’in uzantınızı Cygwin ile derlemesine izin vermek için şunu yazmanız gerekir:
python setup.py build --compiler=cygwin
ve Cygwin olmayan modda 3 Cygwin için veya MinGW tipi için:
python setup.py build --compiler=mingw32
Bu seçeneklerden/derleyicilerden herhangi birini varsayılan olarak kullanmak istiyorsanız, bunu Distutils için kişisel veya sistem genelindeki yapılandırma dosyanıza yazmayı düşünmelisiniz (bkz. Distutils Yapılandırma Dosyaları.)
Python ve MinGW’nin Eski Sürümleri¶
Aşağıdaki talimatlar yalnızca, MinGW’si 3.0.0’dan düşük (binutils-2.13.90-20030111-1 ile) 2.4.1’den düşük bir Python sürümü kullanıyorsanız geçerlidir.
Bu derleyiciler bazı özel kütüphaneler gerektirir. Bu görev, Borland’ın C++’ından daha karmaşıktır çünkü kitaplığı dönüştürecek bir program yoktur. Öncelikle Python DLL’nin dışa aktardığı bir sembol listesi oluşturmalısınız. (Bu görev için iyi bir program https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/ adresinde bulabilirsiniz).
pexports python25.dll >python25.def
Yüklü bir python25.dll
dosyasının konumu, yükleme seçeneklerine ve Windows sürümüne ve diline bağlı olacaktır. “Sadece benim için” kurulumda, kurulum dizininin kökünde görünecektir. Paylaşılan bir kurulumda, sistem dizininde bulunur.
Ardından bu bilgilerden gcc için bir içe aktarma kitaplığı oluşturabilirsiniz.
/cygwin/bin/dlltool --dllname python25.dll --def python25.def --output-lib libpython25.a
Ortaya çıkan kitaplık, python25.lib
ile aynı dizine yerleştirilmelidir. (Python kurulum dizininizin altındaki libs
dizini olmalıdır.)
Uzantınız başka kitaplıklar (zlib,…) kullanıyorsa, onları da dönüştürmeniz gerekebilir. Dönüştürülen dosyalar, normal kitaplıkların yaptığı gibi aynı dizinlerde bulunmalıdır.
Ayrıca bkz.
- Building Python modules on MS Windows platform with MinGW
MinGW ortamı için gerekli kitaplıkları oluşturmaya ilişkin bilgiler.
Dipnotlar
- 1
Bu aynı zamanda mevcut tüm COFF kitaplıklarını aynı adı taşıyan OMF kitaplıklarıyla değiştirebileceğiniz anlamına gelir.
- 2
Daha fazla bilgi için https://www.sourceware.org/cygwin/ adresini kontrol edin.
- 3
O zaman kullanılabilir POSIX öykünmesine sahip değilsiniz, ancak
cygwin1.dll
‘e de ihtiyacınız yok.