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 (Start ‣ Accessories):

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 installkomutunu ç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)

prefix/lib/pythonX.Y/site-packages

/usr/local/lib/pythonX.Y/site-packages

(1)

Unix (non-pure)

exec-prefix/lib/pythonX.Y/site-packages

/usr/local/lib/pythonX.Y/site-packages

(1)

Windows

prefix\Lib\site-packages

C:\PythonXY\Lib\site-packages

(2)

Notlar:

  1. Çoğu Linux dağıtımı Python’u sistemin standart bir parçası olarak içerir, bu nedenle prefix ve exec-prefix genellikle Linux’ta /usr ‘dır. Python’u Linux’ta (veya herhangi bir Unix benzeri sistemde) kendiniz kurarsanız, varsayılan prefix ve exec-prefix /usr/local şeklindedir.

  2. 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, Başlat ‣ Programlar ‣ Python X.Y ‣ Python (komut satırı) öğ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

userbase/lib/pythonX.Y/site-packages

scriptler

userbase/bin

Data

userbase

C başlıkları

userbase/include/pythonX.Yabiflags/distname

Windows’ta kullanılan değerler:

Dosya tipi

Kurulum dizini

Modüller

userbase\PythonXY\site-packages

scriptler

userbase\PythonXY\Scripts

Data

userbase

C başlıkları

userbase\PythonXY\Include{distname}

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

home/lib/python

scriptler

home/bin

Data

home

C başlıkları

home/include/python/distname

(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

prefix/lib/pythonX.Y/site-packages

extension (uzatma) modülleri

exec-prefix/lib/pythonX.Y/site-packages

scriptler

prefix/bin

Data

prefix

C başlıkları

prefix/include/pythonX.Yabiflags/distname

--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

prefix\Lib\site-packages

scriptler

prefix\Scripts

Data

prefix

C başlıkları

prefix\Include{distname}

Ö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

--install-purelib

extension (uzatma) modülleri

--install-platlib

Tüm modüller

--install-lib

scriptler

--install-scripts

Data

--install-data

C başlıkları

--install-headers

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

prefix/lib/pythonver/distutils/distutils.cfg

(1)

personal

$HOME/.pydistutils.cfg

(2)

local

setup.cfg

(3)

Ve Windows’ta yapılandırma dosyaları şunlardır:

Dosya tipi

Konum ve dosya adı

Notlar

system

prefix\Lib\distutils\distutils.cfg

(4)

personal

%HOME%\pydistutils.cfg

(5)

local

setup.cfg

(3)

On all platforms, the “personal” file can be temporarily disabled by passing the –no-user-cfg option.

Notlar:

  1. 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.

  2. Unix’te, HOME ortam değişkeni tanımlı değilse, kullanıcının ana dizini standart pwd modülünden getpwuid() işleviyle belirlenir. Bu, Distutils tarafından kullanılan os.path.expanduser() işlevi tarafından yapılır.

  3. Yani, geçerli dizinde (genellikle kurulum komut dosyasının konumu).

  4. (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ı normalde C:\Pythonşeklindedir. Lib\distutils\distutils.cfg. Python 1.5.2 altında, varsayılan önek C:\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.

  5. Windows’ta, HOME ortam değişkeni tanımlı değilse, USERPROFILE HOMEDRIVE ve HOMEPATH denenecektir. Bu, Distutils tarafından kullanılan os.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.