Python Programlama

Teşekkür ettim baya bişeyler öğrendim Python da soru işaretlerim kalktı gibi… Son soru ozaman derlediği zaman işletim sisteminde Python etkileşim kabuğu olmadan normal bir program gibi programlarımız işletim sisteminde çalışır… Örneğin Windows yazdığımız bir program paketlendiği zam Windows da Python etkileşim kabuğu olmasa da bir c++ ile yazılmış program gibi çalışılır yada Linux da yapılan program çalıştırmak için etkileşim kabuğunu açıp programı ordan çalıştırmaya çalışmayacğız mı oluyor…

gerekli olan bağımlılıklarla birlikte dağıtırsanız tabiki çalışır mesela bazı windows programları bazı kütüphanelere bağımlıdır dll dosyalarına bunlarıda dosya ile birlikte dağıtmalısınız.

İlk etapta Linux da Python öğrenme çalıştırma işlemlerini öğrenmek istiyorum… Evet Windows da program sadece exe dosyasından oluşmaz bir sürü dll dosyası yer alır. Ekstra program dosyaları falan… Öğrenmek isteğimi öğrendim… Python başlarken etkileşim kabuğu sık sık kullanınca bende c++ program oluşturmayacağım sandım… Etkileşim kabuğu program kotlsrımızı kontrol etmek için kullandığımız arayüz oluyor derleme paketleme işlemi ayrı aşama

Python’da işletim sistemi yazamazsınız ne yazık ki. Ancak gerçekten çok güçlü ve kullanımı çok kolay bir dildir. Açıkçası C++ mı yoksa Python mı diye bir soru yöneltilmiş olsa düşünmeden Python derim ben.

Bende ondan yöneldim c++ ileri seviye türkçe kaynak bulmak zor imkansız da diyebilirim bir nokta da tıkandım… C++ de yazacağın birkaç satırlık basit bir uygulamayı Python da bir satır ile yspıprsun… Kıyaslamak nekadar doğru olur o tartışılır… Programlama dilleri kalem gibidir örnek bir dilekçe yi kurşun kalemle yazamazsınız aynı şekilde bir portre yi dolma kalemle çizmek nekadar mantıklı olur… C++ donanım tarzı program yapmak için mecbursun sürücü yazmak yada işletim sistemi yapmak oyun modülü yapmak vs… Gerçi Pythonda da oyun yapılıyormuş okuduğum kadarıyla… Yada c# c++ yapabildiğinizi yapamazsınız görsellik için geliştirilen bir dil c++ Android uygulaması yaparken c# imkansız Java ile yine Android uygulaması yaparken Python kadar sade değil… Gibi gibi :))

Merhaba.

Linux ortamında da py uzantılı dosyaları pyinstaller ile exe dosyalarına dönüştürebilirsiniz. Pyinstaller’ın Linux’de kullanımı Windows’a göre biraz daha farklı:

Önce wine indirmeniz gerekiyor.

sudo apt-get install wine-stable

Daha sonra python’ın sitesinden bir tane Python msi dosyası indirmek gerekiyor.

Örn:
https://www.python.org/ftp/python/3.4.4/python-3.4.4.msi

Sonra bu sürüm wine’a kurulur:

wine msiexec /i python-3.4.4.msi /L*v log.txt

Sonra kurulan dizine girilir:

cd ./Python34

Sonra pyinstaller bu sürüme kurulur.

wine python.exe Scripts/pip.exe install pyinstaller

Bu işlemler yapıldıktan sonra artık aşağıdaki dizinde derleme işlemleri yapılır.

~/.wine/drive_c/Python34

Eğer Python programınızda 3. kullanıcılar tarafından yazılmış kütüphaneler kullanıyorsanız, bu kütüphaneleri bir de wine’ın içine kurmak gerekir.

Örn:

Diyelim python3 kullanıyorsunuz. Normalde, bir kütüphaneyi yüklemek için şu komutlar yazılır.

pip3 install pyinstaller

Python2 için bu ;

pip install pyinstaller

Wine’ın içindeki python’a bir kütüphane yüklemek için az önce yazdığım komut yazılıyor:

# ~/.wine/drive_c/Python34 dizinindeyiz.
wine python.exe Scripts/pip.exe install pyinstaller

Derleme işlemi ise Windows üzerinde normalde aşağıdaki gibiyken:

# test.py'nin bulunduğu dizinde terminal açtığımızı varsayalım
pyinstaller seçenekler test.py

Linux’de de aşağıdaki gibidir:

# test.py'yi ~/.wine/drive_c/Python34 dizinin içine yerleştirmiş olalım.
wine ./Scripts/pyinstaller.exe seçenekler test.py

Seçeneklerle ilgili Pyinstaller’ın dökümanına göz atabilirsiniz.

https://pythonhosted.org/PyInstaller/usage.html

2 Beğeni

Ellerine sağlık hocam… Sen ne etmişsin sayende baya şey öğrendim… Linux içinde derleme yapmam mümkün dime aynı yolla… Yani aynı programı Linux için de derlemek mümkün…

Linux’de derleme işlemini cython aracılığı ile yapabilirsiniz.

Python2 için:

sudo apt-get install cython

Python3 için:

sudo apt-get install cython3

Sonra test.py dosyası bir test.c dosyasına dönüştürülür (derlenir):

cython3 test.py --embed 

Sonra da test.c gcc derleyicisiyle derlenebilir:

gcc -Os -I /usr/include/python3.5m -o test test.c -lpython3.5m -lpthread -lm -lutil -ldl

Bu işlemlerden sonra test isimli derlenmiş bir python programı oluşur.

1 Beğeni

Sağlasınız arkadaşlar Python da kafam takılan soru işaretlerini kaldırdınız teşekkür ederim… Neden direk Python kodu derlemiyoruz c ye çevirip c yi derliyoruz.?

Aşağıdaki linklerin ilkinde, compilers kısmında derleyici adları ve kısa açıklamalar yer alıyor.

Kaynak: https://wiki.python.org/moin/PythonImplementations

Compilers

These compilers usually implement something close to Python, although some compilers may impose restrictions that alter the nature of the language:

2c-python - a static Python-to-C compiler, apparently translating CPython bytecode to C

Compyler - an attempt to “transliterate the bytecode into x86 assembly” (now abandoned)

Cython - a widely used optimising Python-to-C compiler, CPython extension module generator, and wrapper language for binding external libraries. Interacts with CPython runtime and supports embedding CPython in stand-alone binaries.

GCC Python Front-End - an in-progress effort to compile Python code within the GCC infrastructure

Nuitka - a Python-to-C++ compiler using libpython at run-time, attempting some compile-time and run-time optimisations. Interacts with CPython runtime.

Pyc - performs static analysis in order to compile Python programs, uses similar techniques to Shed Skin

Shed Skin - a Python-to-C++ compiler, restricted to an implicitly statically typed subset of the language for which it can automatically infer efficient types through whole program analysis

unPython - a Python to C compiler using type annotations

VOC - A transpiler that converts Python bytecode into Java bytecode.

Neden C ceviriyoruz sorusuna soyle yanit vereyim her programlama dili sonucda 01 yani makina koduna donusuyor C ile yazidigmiz kodu derlediyimiz zamanda bu defa C kodlari Assambly diline sonrasinda 01 diline donusuyor neden direk Assamblu ile diyilde kodlarimizi C ile yaziyoruz o zaman sorusuyla ayni sizin sorunuz. Derleyiciler C kodunu Assamblu diline donusture biliyor o yuzden bu yontem daha kolay(python==>C==> Assambly==>01) direk Python kodlarini Assambly diline ceviren bir derleyici olursa o zaman C cevirmeye gerek kalmazdi(bildiyim kadariyla yok)…Derleyici demek bir programlama dilini baska bir dile ceviren demek butun derleyiciler bu isi yapar C derleyicisi Assambly diline cevirir Assambly-da sonda 01 makina koduna donusuyor isterseniz siz direk 01 makina kodu yazarakda program yaza bilirsiz fakat python-da bir satirlik kod 01 cevirirsen 100 satir ola bilir.O yuzden bu isler kolaylastirici gibi calisiyor sen 01 cevirmene gerek yok derleyici bunu yapiyor

Teşekkür ederim… Ben diğer diller gibi düştüğüm için garibe geldi c de c++ derleyici kotları makina diline çeviriyor ya Python da o mantıkla hareket eden dil sandım… Java da benzer yöntem ama orada zaten programı Java run time çalıştırdığı için durum daha farklı galiba neyse herşey için teşekkür ederim… Ben boks maçına devam edeyim :))

Python’ın sanal makinesi ve standart yorumlayıcısı CPython’dır, C diliyle yazılmıştır. Belki gördünüz belki sonra göreceksiniz, py dosyaları dışında pyc isimli başka dosyalar da var. Bunların içinde bytecode’lar bulunur. Mesela test.py isimli bir dosyanın yanında bir de test.pyc isimli bir dosya oluşmuş görebilirsiniz. Bu dosyayı da çalıştırabilirsiniz…

Farklı dillerde yazılmış başka Python dili yorumlayıcıları/uygulayıcıları var:

IronPython (Python running on .NET)
Jython (Python running on the Java Virtual Machine)
PyPy (A fast python implementation with a JIT compiler)
Stackless Python (Branch of CPython supporting microthreads)
MicroPython (Python running on micro controllers)

Merhaba.

Arkadaşlar tüm sorularınıza cevap vermiş. Yine de bir not düşmek istedim. Programlama dilleri çalıştırılmaları bakımından ikiye ayrılır: Derlenen diller ve yorumlanan diller. C++ bir derlenen dildir. Çalıştırmak için önce derleyip üstünde çalıştığınız işletim sistemine özgü makine kodu elde edersiniz ve bunu doğrudan çalıştırabilirsiniz. Python’da ise bir yorumlayıcı programınızı deyim yerindeyse satır satır okur ve işletim sisteminin anlayacağı formata çevirip bu satırları anlık olarak çalıştırır. Yukarıda bahsedildiği gibi Python programları derlenebilir de. Sonuçta derlenebilen bir dil olan C ile yazılmış bir dil Python. Derlemenin ve yorumlamanın birbirlerine göre avantaj ve dezavantajları var. Örneğin; büyük projelerde derleme işlemi uzun sürebildiği için hata ayıklama süreci sancılı bir sürece dönüşebilir. Ancak derlenen bir program yorumlanan bir programa göre çok daha hızlı olacaktır. Yorumlanan bir programda derleme işlemi olmadığı için hata ayıklama süreci çok daha hızlı işleyebilir. Ancak aradaki yorumlayıcı programın daha yavaş olmasına sebep olur. Bu avantaj ve dezavantajlar artırılabilir. Açıkçası bu konuda tek bir en iyi yok; projenizin gerekliliklerine göre en avantajlı olanı seçmelisiniz.

İyi çalışmalar.

peki hata ayıklama kısmını derlemeden yapsak ve son ürünü derleyerek oluştursak nasıl olur ? Sizce ?

Konuyu biraz daha açabilir misiniz?

örneğin masaüstü bir client geliştiriyorum tkinter ve socket modüllerini kullanan basit bir uygulama son haline karar verdikten sonra bunu c olarak derleyip build edersem hız konusunda avantaj sağlar mı ? bana geliştirme aşamasında hata ayıklama işlemleri bittitken sonra

Bir durumdan bahsetmek istiyorum:

Örneğin bir hello.c dosyasının içinde şunlar yazıyor olsun:

#include <stdio.h>

int main(){
    printf("Hello World\n");
    return 0;
}

Bir tane de hello.py dosyası olsun:

print("Hello World")

Şimdi bu iki dosyayı da derlediğimiz zaman, aynı işlemi yapan iki tane dosya elde etmiş oluruz.

Gördüğünüz gibi hello.c dosyasındaki “Hello World” yazısını ekrana bastırmak için Python’da ihtiyaç duyulandan daha fazla kod yazılması gerekiyor.

Ancak cython ile daha az kodu olan hello.py dosyasını hello.c dosyasına dönüştürürsek, 2103 satırlık bir hello.c dosyası oluşuyor.

Her ne kadar aynı işi yapıyor da olsalar, bu iki c dosyasının aynı dosyalar olmadığı ortada.
Bu iki dosyadan hangisi daha kısa sürede çalışır , onu test etmek lazım.

1 Beğeni

benimde merak ettiğim oydu zaten biraz bile hız konusunda avantaj sağlıyorsa kullanılabilir gibi geldi bana

time komutuyla çalıştırılma zamanlarını ölçmeye çalıştım:

tanberk@kutlu:~/1$ time ./C
Hello World

real	0m0,002s
user	0m0,000s
sys	0m0,000s
tanberk@kutlu:~/1$ time ./Python
Hello World

real	0m0,047s
user	0m0,036s
sys	0m0,008s
tanberk@kutlu:~/1$ 

Yukarıdaki çıktılara göre hello.c dosyasından derlenen C isimli dosya, hello.py dosyasından derlenen Python isimli dosyadan çok daha kısa sürede çalışıyor.

Bu da hello.py’nin çalışma zamanı:

tanberk@kutlu:~$ time ./hello.py
Hello World

real	0m0,044s
user	0m0,036s
sys	0m0,004s
tanberk@kutlu:~$ 

Gördüğüm kadarıyla, hello.py dosyası C dosyasına dönüştürüldüğünde ve bu yeni dosya gcc ile derlendiğinde, derlenmiş dosya ile hello.py dosyası arasında pek bir çalışma zamanı farkı olmuyor.

1 Beğeni