# Python Modüllerini Yükleme (Eski sürüm)

Yazar:

  Greg Ward

Not

Tüm `distutils` paketi kullanımdan kaldırıldı ve Python 3.12’de kaldırılacak. Bu belgeler yalnızca referans olarak tutulur ve paketle birlikte kaldırılacaktır. Daha fazla bilgi için What’s New girişine bakın.

Ayrıca bakınız

Python Modüllerini Kurmak

  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 Python Modüllerini Kurmak 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ı

Bir modül kaynak dağıtımı indirirseniz, bunun standart bir şekilde, yani Distutils kullanılarak paketlenip dağıtılmadığını oldukça hızlı bir şekilde anlayabilirsiniz. İlk olarak, dağıtımın adı ve sürüm numarası, indirilen arşivin adında belirgin bir şekilde yer alacaktır, ör. `foo-1.0.tar.gz` veya `widget-0.9.7.zip`. Ardından, arşiv benzer adlı bir dizine açılır: `foo-1.0` veya `widget-0.9.7`. Ek olarak, dağıtım bir kurulum komut dosyası `setup.py` ve `README.txt` veya muhtemelen sadece `README` adlı bir dosya içerecek ve modül dağıtımının oluşturulması ve kurulmasınının bir terminalden bir komut çalıştırmanın basit bir meselesi olduğunu açıklamalıdır:

    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 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) | `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 kütüphanelerini 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

Files will be installed into subdirectories of `site.USER_BASE` (written as `userbase` hereafter). This scheme installs pure Python modules and extension modules in the same location (also known as `site.USER_SITE`). Here are the values for UNIX, including macOS:

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. kütüphaneler için derleyici arama yolunun yanı sıra paylaşılan C kütüphaneleri (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=~

To make Python find the distributions installed with this scheme, you may have to modify Python’s search path or edit `sitecustomize` (see `site`) to call `site.addsitedir()` or edit `sys.path`.

`--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 }`. Şu şekilde 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`. Şu şekilde 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 kütüphanelerine, 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/')

However, if you reinstall the same minor version of Python (perhaps when upgrading from 2.2 to 2.2.2, for example) `site.py` will be overwritten by the stock version. You’d have to remember that it was modified and save a copy before doing the installation.

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

Tüm platformlarda, `--no-user-cfg` seçeneği geçilerek “kişisel” dosya geçici olarak devre dışı bırakılabilir.

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. On Unix, if the `HOME` environment variable is not defined, the user’s home directory will be determined with the `getpwuid()` function from the standard `pwd` module. This is done by the `os.path.expanduser()` function used by Distutils.

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 `global` 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 kütüphane gerektiriyorsa, bunu `Setup` dosyasını düzenleyerek ve `python setup.py build` çalıştırarak ekleyebilirsiniz. Örneğin, modül satır ile tamamlanı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++

Bu alt bölüm, Distutils’i Borland C++ derleyici sürüm 5.5 ile kullanmak için gerekli adımları açıklar. Öncelikle Borland’ın nesne dosya formatının (OMF), Python veya ActiveState web sitesinden indirebileceğiniz Python sürümünün kullandığı formattan farklı olduğunu bilmelisiniz. (Python, nesne dosya formatı olarak COFF kullanan Microsoft Visual C++ ile oluşturulmuştur.) Bu nedenle Python’un `python25.lib` kütüphanesini Borland formatına dönüştürmeniz gerekmektedir. Bunu aşağıdaki gibi yapabilirsiniz:

    coff2omf python25.lib python25_bcpp.lib

`coff2omf` programı Borland derleyicisiyle birlikte gelir. `python25.lib` dosyası, Python kurulumunuzun `Libs` dizinindedir. Uzantınız başka kütüphaneler (zlib, …) kullanıyorsa, onları da dönüştürmeniz gerekir.

Dönüştürülen dosyalar, normal kütüphanelerle aynı dizinlerde bulunmalıdır.

Distutils, bu kütüphaneleri 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 kütüphane bulup bulmadığını kontrol eder ve ardından bu kitaplığı kullanır. Böyle özel bir kütüphane 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 bakınız

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 kütüphane, `python25.lib` ile aynı dizine yerleştirilmelidir. (Python kurulum dizininizin altındaki `libs` dizini olmalıdır.)

Uzantınız başka kütüphaneler (zlib,…) kullanıyorsa, onları da dönüştürmeniz gerekebilir. Dönüştürülen dosyalar, normal kütüphanelerde olduğu gibi aynı dizinlerde bulunmalıdır.

Ayrıca bakınız

MinGW ile MS Windows platformunda Python modülleri oluşturma

  MinGW ortamı için gerekli kütüphaneleri oluşturmaya ilişkin bilgiler.

Dipnotlar

[ 1 ]

Bu aynı zamanda mevcut tüm COFF-kütüphanelerini aynı adı taşıyan OMF-kütüphaneleriyle 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.