Python ile ilginenler, en azından bir kaç kez üçüncü şahısların yazdığı modüllerden yüklemiştir ve bu modülü yüklerken modülle birlikte gelen setup.py betiğini build ve/veya install parametresiyle çalıştırmıştır. Bu kurulum betiği sayesinde geliştiriciler zaman kaybetmeden modülü kullanılabilir hale getirir… Biz de bu yazıda işimizi yeteri kadar görecek şekilde kurulum betiği dosyası hazırlamayı öğreneceğiz. Bu yazıdan kısa süre önce ilk defa kurulum betiği hazırlamış oldum…

Zorunlu olmasa da genel olarak kurulum betiğine setup.py adını veriyoruz ve bu yazı da kurulum betiğimizi bu dosyada hazırlayacağız.

Bir kurulum betiği hazırlamak için Python ile gelen distutils modülünü kullanıyoruz.

from distutils.core import setup

setup()

distutils.core modülünde bulunan setup fonksiyonunu kullanarak modülümüzle ilgili gerekli bilgileri girmemiz gerekiyor.

Örneğin hede.py adında tek dosyadan oluşan bir modülümüz var. Bunun kurulum betiğini oluşturalım…

from distutils.core import setup

setup(
    name = "hede",
    py_modules = ["hede"],
    version = "1.0",
  • name parametresi uygulamanın adını belirtir.
  • py_modules parametresine liste olarak girilen isimler *.py dosyalarının uzantısız hali olmalıdır. Bu parametre tekil modülleri bekler.
  • version parametresi ise uygulamanızın versiyonunu belirtir.

name ve version parametreleri, uygulamanızı easy_install ve/veya pip ile kurulabilmesi için pypi adresinde yayınlamanızda gereklidir. Şimdi setup.py dosyasının olduğu dizine konsol ile girin ve;

python setup.py sdist

komutunu verin. Bulunduğunuz dizinde dist adında bir dizin ve içinde hede-1.0.tar.gz adlı bir dosya oluşacaktır. Daha sonra bu dosyayı pypi adresinde nasıl yayınlayacağımızı göreceğiz…

hede.py modülünü kurmak için de;

python setup.py install

komutunu verebilirsiniz. Windows kullanıcıları için binary dosya oluşturmak için;

python setup.py bdist_wininst

Fedora, Mageia gibi rpm paket sistemini kullanan kişiler için;

python setup.py bdist_rpm

komutunu verebilirsiniz. Windows kullanıcıları için Linux altında da binary(*.exe) oluşturmak mümkün. Ancak bunun için Python’un geliştiriciler için olan paketini kurmanız gerekmektedir. Ubuntu da python-dev ismiyle bulup kurmak mümkün. Diğer GNU/Linux dağıtımlarında da ismi büyük ihtimal aynıdır…

Aynı şekilde rpm paketi oluşturmak içinde python-dev paketinin kurulu olması gerekebilir…

Uygulamamızı biraz daha geliştirelim. lib adında bir modül paketi oluşturup(İçinde init.py olan bir dizin) içine hedelib.py ve hodolib.py modüllerini ve lib2 adında bir modül paketi oluşturup içine hedelib2.py adlı bir modül oluşturduğumuzu varsayalım.

hede.py
lib/
    lib2/
        __init__.py
        hedelib2.py
    __init__.py
    hedelib.py
    hodolib.py

Uygulamamızda modül paketi varsa setup() fonksiyonuna packages parametresini ekleyip paketlerin ismini içeren bir liste girmeliyiz.

from distutils.core import setup

setup(name='hede',
      version='1.0',
      description='Python hede kütüphanesi',
      author='Metehan Özbek',
      author_email='metehan [at] metehan.us',
      url='http://www.metehan.us',
      packages=['lib', 'lib.lib2'],
     )

Python paket indeksinde gözükmesi içinde url, author, author_email ve description parametrelerini girdik.

python setup.py install

Komutunu verdiğinizde Python’un kütüphanelerinin bulunduğu dizin içerisindeki site-packages(Ubuntu da dist-packages) dizininde; hede.py ve lib modül paketi içinde, lib2 dizini ve modüllerle beraber yüklenecektir. Bu durumda Python yorumlayıcısında modülünüzü şu şekilde çağırabilirsiniz:

import hede
from lib.lib2 import hedelib2
from lib import hedelib, hodolib

Tabii lib ismi çok kullanıldığından bir ihtimal çakışma olabilir. Bunu önlemek için ana modül paketinizi hede yapmanız daha doğru olacaktır.

from hede import hede
from hede.lib.lib2 import hedelib2

Uygulamanızda çalıştırılabilir bir betik oluşturmak isteyebilirsiniz. Oluşturduğunuz betiği(ör: hede) konsoldan hede yazarak çalıştırmak isteyebilirsiniz. setup() fonksiyonuna gireceğiniz scripts parametresiyle liste olarak girdiğiniz betikleri GNU/Linux ortamında /usr/bin/ altına Windowsta ise Python’un kurulduğu dizin içerisindeki Scripts dizinine yazdırabilirsiniz. Yalnız Windowsta betiğinizi çalıştırabilmek için bir *.bat dosyası ile betiğinizi çalıştırmanız gerekmektedir(ör: hede için hede.bat) ve path e ekli olmadığından cmd ile betiğinizi çalıştıramazsınız.

hede.py
script/
    hede
lib/
    lib2/
        __init__.py
        hedelib2.py
    __init__.py
    hedelib.py
    hodolib.py

from distutils.core import setup

setup(name='hede',
      version='1.0',
      description='Python hede kütüphanesi',
      author='Metehan Özbek',
      author_email='metehan [at] metehan.us',
      url='http://www.metehan.us',
      packages=['lib', 'lib.lib2'],
      scripts=["script/hede"]
     )

Uygulamız gelişti ve resim, ses dosyası gibi veriler ekledik. Dizin içindeki verileri almak için data_files, modül paketi içindeki veri dizinlerini almak için package_data parametrelerini kullanırız. Yeni dizin-dosya yapımız şöyle olsun:

hede.py
data/
    veri.db
script/
    hede
lib/
    lib2/
        data/
            simge.png
        __init__.py
        hedelib2.py
    __init__.py
    hedelib.py
    hodolib.py

Bu dosya-dizin yapısına göre veri dosyalarımızı kurulum betiğimize ekleyelim.

from distutils.core import setup

setup(name='hede',
      version='1.0',
      description='Python hede kütüphanesi',
      author='Metehan Özbek',
      author_email='metehan [at] metehan.us',
      url='http://www.metehan.us',
      packages=['lib', 'lib.lib2'],
      scripts=["script/hede"],
      data_files=[("data", ["veri.db"])],
      package_data={"lib.lib2":["data/*"]}
     )

Görüldüğü üzere data_files bir liste verisi alıyor. Listenin her elemanı birer tuple. Tuple ilk elemanı dizin, ikinci elemanı ise dosya ismidir. package_data ise bir sözlük veri tipi alıyor ve her elemanın anahtar ögesi modül paketi ismi, değer ögesi ise liste olarak dizin ve dosya alıyor. Burada düz

Okul Zil Programı

yilsoftzil

9786059223690
logo5

Esma-ül Hüsna

Ziyaretçi İstatistikleri

Bugün15
Dün299
Bu hafta1017
Bu ay4602
Hepsi788934