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/python*X.Y*/site-packages"              | "/usr/local/lib/python*X.Y*/site-packages"         | (1)     |
+-------------------+-------------------------------------------------------+----------------------------------------------------+---------+
| Unix (non-pure)   | "*exec-prefix*/lib/python*X.Y*/site-packages"         | "/usr/local/lib/python*X.Y*/site-packages"         | (1)     |
+-------------------+-------------------------------------------------------+----------------------------------------------------+---------+
| Windows           | "*prefix*\Lib\site-packages"                          | "C:\Python*XY*\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/python*X.Y*/site-packages"                  |
+-----------------+-------------------------------------------------------------+
| scriptler       | "*userbase*/bin"                                            |
+-----------------+-------------------------------------------------------------+
| Data            | "*userbase*"                                                |
+-----------------+-------------------------------------------------------------+
| C başlıkları    | "*userbase*/include/python*X.Y**abiflags*/*distname*"       |
+-----------------+-------------------------------------------------------------+

Windows'ta kullanılan değerler:

+-----------------+-------------------------------------------------------------+
| Dosya tipi      | Kurulum dizini                                              |
|=================|=============================================================|
| Modüller        | "*userbase*\Python*XY*\site-packages"                       |
+-----------------+-------------------------------------------------------------+
| scriptler       | "*userbase*\Python*XY*\Scripts"                             |
+-----------------+-------------------------------------------------------------+
| Data            | "*userbase*"                                                |
+-----------------+-------------------------------------------------------------+
| C başlıkları    | "*userbase*\Python*XY*\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/python*X.Y*/site-packages"                   |
+-------------------+------------------------------------------------------------+
| extension         | "*exec-prefix*/lib/python*X.Y*/site-packages"              |
| (uzatma)          |                                                            |
| modülleri         |                                                            |
+-------------------+------------------------------------------------------------+
| scriptler         | "*prefix*/bin"                                             |
+-------------------+------------------------------------------------------------+
| Data              | "*prefix*"                                                 |
+-------------------+------------------------------------------------------------+
| C başlıkları      | "*prefix*/include/python*X.Y**abiflags*/*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)     | "--install-platlib"     |
| modülleri              |                         |
+------------------------+-------------------------+
| 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/python*ver*/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.
