# 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

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

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 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 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 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 bakınız

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.