26 Kasım 2008 Çarşamba

Nano Snake

Cep telefonlarından bildiğimiz yılan oyunu Python ile 13 satırlık bir kod ediyormuş =)
Konsolda şuradaki komutu verin. Tahmin edebileceğiniz gibi pygame sistemde kurulu olmalı.

22 Kasım 2008 Cumartesi

Kod aramak

Ben her hangi bir konuda kod örneği bulmak için şu siteleri kullanıyorum, sizin de işinize yarayabilir.

11 Kasım 2008 Salı

setup.py Dosyası hazırlamak

Bu yazımızda python un distutils (distutils.core.setup) modülü ile kurulum betiği hazırlayacağız...

distutils modülü öntanımlı olarak python ile gelmektedir.

Öncelikle setup.py den biraz bahsedeilm: çoğu python uygulaması distutils ile kurulum betikleri hazırlar, bunun nedeni distutils in sorunsuz, kolay ve tabi ki python ile birlikte geliyor olması diyebiliriz. :D

Şimdi betiğimizi yazalım:


# -*- coding: utf-8 -*-
# setup.py denemesi...

from distutils.core import setup # distutils.core modülündeki setup metodununu çağırıyoruz...

# simge gibi şeyleri tanımlıyoruz...
datas = [("share/applications", ["data/kxmp.desktop"]), ("share/pixmaps", ["kxmp/kxmp.png"])]

setup(name = "kxmp",
version = "0.1.2",
description = "Graphical xm player...",
author = "Oğuzhan Eroğlu",
author_email = "oguzhan@oguzhaneroglu.com",
url = "http://kxmp.googlecode.com",
packages = ["kxmp"],
data_files = datas,
scripts = ["data/kxmp"])


Şimdi de kodu açıklayalım:
setup argumanları:

  • name: Uygulamanın adı.
  • version: Uygulamanın sürüm numarası (str olmalı)
  • description: Uygulamanın ne yaptığını anlatan kısa bir açıklama.
  • author: Yazarın adı.
  • author_email: Yazarın e-posta adresi.
  • url: Uygulamanın proje sayfası.
  • packages: Uygulamanın kaynak kodlarının bulunduğu yani kurulacak dizinler (liste olmalı)
  • data_files: Uygulamanın çalıştırma dosyası, .desktop gibi dosyaların bulunduğu dizin. (liste olmalı)
  • scripts: /usr/bin altına gidecek betikler. (liste olmalı)

burdan önemli noktalara değinecek olursak:
packages
, data_files, scripts argumanları liste olmalıdır, çünkü bu tür dizinler birden fazla da olabilir.

datas değişkenini açıklayacak olursak:
yapılan işlem şu liste içerisine bilgiler ("hedefdizin", [kaynakdizinler]) şeklinde veriliyor.

ve dikkat ettiyseniz setup hep /usr/ altında çalışır yani /usr/share/applications yazmak yerine share/applications yazarız.

Yaptığı şeye değinecek olursak çok basit kodlarınızı site-packages dizinine atıyor... yani uygulamayı çalıştıracak betik sadece import a dese yeterli (a burada packages argumanına verilen dizinlerden biri).

İyi çalışmalar...

Python projesinde klasör yapısı

Bunları yap:

  • Projenizin en üst dizininin adı projenizle aynı olsun, - işareti ile birlikte versiyonu belirtin. Örneğin projenin adı Twisted ise root klasörünüz Twisted-2.5 gibi birşey olabilir.
  • Twisted/bin dizinini oluşturun, ve eğer var ise çalıştırılabilir dosyalarınızı buraya koyun. Eğer çalıştırılabilir dosyanız bir python kodu ise soy adından .py ifadesini kaldırın. Bahsi geçen Python kodu dizin yapınız içerisinde başka bir yerde duran main fonksiyonunu çağırmaktan başka bir işe yarıyor olmamalı.
  • Projeniz tek bir Python betiğinden oluşuyor ise bunu kök dizininize projenizle aynı ismi vererek yerleştirin. Örneğin: Twisted-2.5/Twisted.py
  • Projeniz birden fazla Python kaynak kodundan oluşuyor ise kök dizininiz altında bir paket (python pakedi) oluşturun (Twisted-2.5/twisted klasörü oluşturup içine __init__.py dosyası koyun) ve kodlarınızı buraya yerleştirin. Örneğin Twisted-2.5/twisted/internet.py
  • Test araçlarınızı kök dizin içerisinde başka bir paket içerisine koyun (Twisted-2.5/tests/). Örneğin önceki örnekteki Twisted-2.5/twisted/internet.py yi test eden test-internet.py yi buraya koyun.
  • Kök dizininize README gibi dosyaları ve setup.py nizi yerleştirin.
Bunları yapma:
  • Kodlarını src yada lib gibi klasörlere koyma bu progamı yerleştirmeden (install etmeden) çalıştırılmasını zorlaştırır.
  • Pakedin içindeki Python betiklerini test eden python betiklerini pakedin içinden başka bir pakedin içine koymaz iseniz kurulum yapıldıktan sonra testleri yapmak zorlaşacaktır.
  • Bir paket oluşturup sadece __init__.py içerisine fonksiyonları dizeceksen bunun yerine bir modül oluşturman çok daha kolay olur.
Kaynak : http://jcalderone.livejournal.com/39794.html