Python Programlama

python

#11

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 :))


#12

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


Sürekli işletim sistemi değiştirmek bilgisayarı yorar mı?
#13

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…


#14

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.


#15

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.?


#16

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.


#17

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


#18

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 :))


#19

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)


#20

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.


#21

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


#22

Konuyu biraz daha açabilir misiniz?


#23

ö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


#24

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.


#25

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


#26

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.


#27

Tabiki C ile yazilan daha performansli nedenide qayet basit simdi C ile Hello world yazan bir program yazarsak bunu derlersek ortaya kucuk boyutlu bir program cikiyor aynisini Python ile yaparsak ve .exe yapmak icin derleme isleminden gecirirsek o zaman print(“Hello world”) C-e nazaran cok buyuk boyutlari olacak tabiki buda performansi etgiliyor.Kisaca soyle ozetleleyim hani dil makinaya daha yakinsa onun performans daha iyi oluyor .Python yuksek seviyyeli bir dil C orta seviyyeli yani makinaya daha yakin…Siralamak gerekirse hangi programlama dilleri daha performansli o zaman ben soyle siralardim…1) Makina kodlari 2) Assambly 3) C ,Python sonlarda fakat bu python kotu dil anlamina gelmiyor pythonda hello world ekrana basdirmak icin 1 satrlik C-de en az 5 satirik Assambly dilindeyse daha cok satirlik kod yazmak gerekiyor yani python ile yapdigini Assambly dilinden yazmak istersen boss yere hamalik yapmis olursun …Python ile yapdigini C veya Assambly dilinde yapa bilirsin fakat cok zamanni harcar


#28

Efrahim’in söylediklerine katılmakla birlikte şunları söylemek isterim. Bir dili başka bir dil ile kıyaslamak bence çok birşey ifade etmiyor. Her bir dilin yaygın olarak kullanıldığı alanlar var…


#29

Evet bende onu belirtm mesele performans acisindan C-dende daha iyi Assambly ile program yazmaktir fakat bu dil suan mikroisemci kodlamlarda kullaniliyor normal masaustu programlarda hic kullanilmiyor neredeyse nedeni gerekde yok zaten Python Java C# gibi guclu kutuphaneler bulunduran diller varken 0-dann bu islemleri yapacak kodlari Assamblu ile yazmak akillica diyl her dilin kendi alani var .C gerekirse Assambly gibi diller performans gerekli yerlerde kullanilir bunlarda cogu zaman mikroislemci mikrodenetleyici driverlern yazilmasi gibi performans boyuutun az olmasi gerekdiyi yerler


#30

Ubuntu 18.04’e geçtiken sonra Ubuntu 17.04’de yapılabilen bazı işlemler bu sürümde eskisi gibi yapılamıyor.

Örnek olarak bu başlıktaki şu mesajımda yazdıklarımı verebilirim. Daha önce o mesajda bahsedilen adımlardan olan

wine python.exe Scripts/pip.exe install pyinstaller

komutu pypiwin32’nin indirilememesi yüzünden çalışmıyor. pyinstaller’ı yüklemeye çalışırken pypiwin32’nin 223 sürümünü indirmeye kalkıyor, oysa bu sürüm Python3.4.4’ü desteklemiyor. Python3.4.4’ün desteklendiği sürüm pypiwin32 219 sürümü.

Dolayısıyla pyinstaller’ı yüklemeden önce:

wine python.exe Scripts/pip.exe install pypiwin32==219

komutunu çalıştırmak gerekiyor. Daha sonra pyinstaller’ı yükleyebilirsiniz.


Sürekli işletim sistemi değiştirmek bilgisayarı yorar mı?