Python ile Kelime veya Cümleleri String Olarak Birleştirme

Python'da cümleleri, kelimeleri veya sayıları bir string olarak birleştirebilmek için aşağıdaki methodlardan herhangi birini kullanabilirsiniz. Bunların tamamı aynı sonucu verecektir.


name ='Serkan'

age = 18


"I am " + name + " and I am " + str(age) + " years old."

I am Serkan and I am 18 years old.


"I am %s and I am %d years old." %(name, age)

I am Serkan and I am 18 years old.


"I am {} and I am {} years old." .format(name, age)

I am Serkan and I am 18 years old.


f"I am {name} and I am {age} years old."

I am Serkan and I am 18 years old.

Python ile e-Mail Nasıl Atılır.

 Python kullanarak kod içerisindeki mesajları mail ile gönderebilmek için aşağıdaki kodu kullanabilirsiniz.


import smtplib

from email.mime.text import MIMEText


msg = MIMEText("Deneme Mesajıdır, Panik Yok!!!")


msg['Subject'] = 'Deneme Mesajı'

msg['From'] = "Services Control <ServicesControl@mailadresi>"

msg['To'] = "kimegonder@domain"


s = smtplib.SMTP('xxx.xxx.xxx.xxx')

s.send_message(msg)

s.quit()


Bu kodu fonksiyon olarak tanımlarsanız mesah göndermeniz daha esnek bir hal alacaktır.



import smtplib

from email.mime.text import MIMEText


def smtpsend(message):

    

    msg = MIMEText(message)

    

    msg['Subject'] = 'Deneme Mesajı'

    msg['From'] = "Services Control <ServicesControl@mailadresi>"

    msg['To'] = "kimegonder@domain"

    

    s = smtplib.SMTP('xxx.xxx.xxx.xxx')

    s.send_message(msg)

    s.quit()


message="Deneme mesajı"

smtpsend(message)

MySql Performans Ayarları

MySql üzerinde bazı denetlemeleri kurulu olan mysqlcheck aracı ile yapabilirsiniz. Mysql veritabanı kontrolü için aşağıdaki komutu kullanabilirsiniz.

mysqlcheck -cA -u root -p

Mysql database optimizasyonu için;

mysqlcheck -oA -u root -p

Bozuk veritabanının onarımı için;

mysqlcheck -rA -u root -p

Bu komutları çalıştırmak için MySql>bin klasörü içinde olmalısınız.

MySql konfigürasyon dosyasında kullandığınız server özelliklerine göre bazı değişiklikler yaparak MySql in performanslı ve hızlı olmasını sağlayabilirsiniz. Bu ayarlar Windows ve Linux işletim sistemlerinin her ikisinde de uygulanabilir. Windows için my.ini dosyasını Linux için my.cfn dosyasını değiştirmelisiniz.

Dikkat: İlk olarak içinde değişiklik yapacağınız MySql konfigürasyon dosyasının bir yedeğini alın.

Aşağıdaki anlatımda 8GB Ram belleğe sahip bir server için yapılandırma yapacağım.

innodb_buffer_pool_size : Varsayılan değeri 128M'dir. InnoDB'nin belleğe yüklenen veri ve dizinleri için ne kadar bellek kullanacağını belirlediğinden, değiştirmek istediğiniz ana ayardır. Özel bir MySQL sunucusu için önerilen boyut, mevcut fiziksel belleğin % 50-80'idir. Bu değerin çok yüksek ayarlanmasının tehlikesi, işletim sistemi dosya sistemi önbelleğine ve InnoDB'nin işlem günlüklerine dayanan bazı MySQL alt sistemleri için bellek kalmamasıdır. InnoDB daha çok bellek içi veritabanı gibi davranır, verileri diskten bir kez okur ve ardından sonraki okumalar sırasında bellekten verilere erişir. Arabellek havuzu, ekleme ve güncelleme işlemleriyle değiştirilen verileri bile önbelleğe alır, böylece disk yazma işlemleri daha iyi performans için birlikte gruplanabilir.

innodb_buffer_pool_size = 5GB

innodb_log_file_size : Varsayılan olarak 48M'dir. Bir günlük grubundaki her günlük dosyasının bayt cinsinden max boyutudur. Yüksek yazma hızı gerektiren sistemler arka plan denetim noktası etkinliklerinin daha uzun süreler boyunca düzgün bir şekilde performans göstermesine olanak sağlamak için bunu artırmak isteyebilir. 4GB'a kadar olan değerler güvenlidir. Tarihsel olarak, büyük bir günlük dosyasıyla çalışmanın dezavantajı, çökme kurtarma sürelerinin artmasıydı. Ancak bu, MySql 5.5 ve 5.6'da büyük ölçüde iyileştirildi. MySQL 5.5 ve daha yüksek sürümlerde kurtarma performansında yapılan iyileştirmeler, günlük dosyası boyutunu daha az dikkate almasına rağmen, daha büyük günlük dosyaları da çökme kurtarmayı yavaşlatır.

innodb_log_file_size = 128M

innodb_file_per_table : Bu özellik devre dışıysa (varsayılan) InnoDB paylaşılan tablo alanında tablolar oluşturur. Innodb_file_per_table etkinleştirilirse (= 1) InnoDB, paylaşılan tablo alanı yerine veri ve dizinleri depolamak için kendi .ibd dosyasını kullanarak her yeni tabloyu oluşturur.

innodb_file_per_table=1

innodb_flush_method : O_DIRECT olarak ayarlandığında, işletim sisteminin önbelleğe alma işlemi atlanacaktır. Bir donanım RAID denetleyicisi kullanıyorsanız, bunu O_DIRECT olarak ayarlamak isteyebilirsiniz. Bu InnoDB arabellek havuzu sayfalarını okurken hem InnoDB'de hem de işletim sisteminin dosya sistemi önbelleğinde bir kopyasının bulunmasının "çift arabelleğe alma" etkisini önler. Bu innodb_buffer_pool_size de düzgün bir şekilde ayarlandığından, çift arabelleğe alma ek yükü olmadığını garanti eder. Bir donanım RAID denetleyiciniz yoksa veya bazı SAN'larda O_DIRECT daha kötü performansa neden olabilir, bu durumda kullanmamanız önerilir.

innodb_flush_method = O_DIRECT

key_buffer_size : Varsayılan değeri 64M'dir. MyISAM tabloları için MySQL'e bellek (RAM) ayırır. MyISAM tabloları için index blokları arabelleğe alınır ve tüm evreler tarafından paylaşılır. key_buffer_size index blokları için kullanılan arabellek boyutudur. Anahtar arabelleği, anahtar önbelleği olarak da bilinir. Key_buffer_size, MyISAM motorunda ince ayar yapmak için muhtemelen en kullanışlı tek değişkendir. MyISAM'ın kendisinin verileri değil, yalnızca indexleri önbelleğe aldığını unutmayın. Dolayısıyla, mümkünse, bu ayarın değeri tüm dizinlerinizin boyutunu kapsamalıdır.  Sunucunuzda kullanılabilir bellek varsa, key_buffer_size değerini artırmak veritabanı hızını önemli ölçüde artırabilir. MySQL belgeleri, 256MB'den daha büyük RAM'e sahip sunucular ve birçok tablo içeren bir veritabanı için 64M'lik bir ayar önerir. MyISAM tabloları için, sunucunuzdaki RAM'in % 25'inden büyük olmayan bir değer önerilir.

key_buffer_size = 256M

max_connections : Maksimum eş zamanlı bağlantı miktarını ayarlar (varsayılan olarak 151). Daha yüksek bir ayar, daha fazla eşzamanlı isteklere izin verir.  “too many connections” hatası görürseniz, daha fazla bağlantıya izin vermek için bu değeri artırmak isteyebilirsiniz. Bunun dezavantajı, daha fazla eşzamanlı bağlantı için daha fazla donanım gerektirmesidir.

max_connections = 250

innodb_log_buffer_size : Günlük dosyaları için arabellek boyutunu belirler. Verilerinize ve trafiğinize bağlı olarak, arabellek hızla dolabilir ve bu nedenle bu değeri yükseltmek performansa yardımcı olabilir.

innodb_log_buffer_size = 8M

query_cache_size : Siteniz ve veritabanınız arasındaki etkileşim daha açık yöndeyse ve siteniz veritabanından yazmaktan daha fazla okuma eğilimi gösteriyorsa, query_cache_type'ı açık tutmak ve query_cache_size değerini 128M veya 256M gibi bir değere ayarlayabilirsiniz.

query_cache_size = 256M

tmp_table_size : Dahili bellek içi geçici tabloların maksimum boyutu. (Gerçek sınır, minimum tmp_table_size ve max_heap_table_size olarak belirlenir.) Bellek içi bir geçici tablo sınırı aşarsa, MySQL bunu otomatik olarak disk üzerindeki MyISAM tablosuna dönüştürür. Çok sayıda gelişmiş GROUP BY sorgusu yapıyorsanız ve çok fazla belleğiniz varsa tmp_table_size değerini (ve gerekirse max_heap_table_size) artırın. Bu değişken, kullanıcı tarafından oluşturulan BELLEK tabloları için geçerli değildir. 

tmp_table_size = 32M

thread_cache_size : Sunucunun yeniden kullanım için kaç tane evreyi önbelleğe alması gerektiği. Bir istemcinin bağlantısı kesildiğinde, orada thread_cache_size'den daha az evre varsa istemcinin evreleri önbelleğe alınır. İş parçacığı istekleri, mümkünse önbellekten alınan iş parçacıklarının yeniden kullanılmasıyla karşılanır ve yalnızca önbellek boş olduğunda yeni bir iş parçacığı oluşturulur. Çok sayıda yeni bağlantınız varsa, performansı artırmak için bu değişken artırılabilir. Normalde, eğer iyi bir iş parçacığı uygulamasına sahipseniz, bu önemli bir performans artışı sağlamaz. Ancak, sunucunuz saniyede yüzlerce bağlantı görürse, yeni bağlantıların çoğunun önbelleğe alınmış evreleri kullanması için normalde thread_cache_size'yi yeterince yüksek ayarlamanız gerekir. 

thread_cache_size = 100

table_open_cache : Tüm iş parçacıkları için açık tablo sayısı. Bu değeri artırmak, mysqld'nin gerektirdiği dosya tanımlayıcı sayısını artırır. Tablo önbelleğini artırmanız gerekip gerekmediğini kontrol ediniz. (Komut: SHOW GLOBAL STATUS LIKE 'open_tables';)

table_open_cache = 600

innodb_flush_log_at_trx_commit : Veritabanını tamamen ACID uyumlu hale getiren 1 varsayılan değerine sahiptir. Değeri 0 veya 2 olarak değiştirebilirsiniz, her ikisi de daha az güvenilirlik pahasına performans kazançları sunar.

innodb_flush_log_at_trx_commit = 1

Join_buffer_size, sort_buffer_size, read_buffer_size ve read_rnd_buffer_size gibi tamponlar, bağlantı başına tahsis edilir. Bu nedenle, read_buffer_size = 1M ve max_connections = 150 ayarı, MySQL'i başlangıçtan itibaren bağlantı başına 1MB x 150 bağlantı tahsis edecek şekilde yapılandırır. Varsayılan read_buffer_sizere değeri 128KB'dir. Varsayılanı artırmak yalnızca sunucu belleğinin boşa harcanması anlamına gelmez, çoğu zaman performansa yardımcı olmaz. Neredeyse tüm durumlarda, bu dört tampon yapılandırma satırını kaldırarak veya yorumlayarak varsayılanları kullanmak en iyisidir. Daha kademeli bir yaklaşım için, boşa harcanan RAM'i boşaltmak için mevcut büyük değerlerinizi azaltın, zamanla bunları varsayılan değerlere düşürmeye devam edin. Bunları keyfi olarak artırmaktan kaçının!

Bir sorgu paketinin maksimum boyutunu büyütün.

max_allowed_packet = 256M

innodb_additional_mem_pool_size : Bir bellek havuzunun bayt cinsinden boyutu InnoDB, veri sözlüğü bilgilerini ve diğer dahili veri yapılarını depolamak için kullanır. Uygulamanızda ne kadar çok tablo varsa, burada o kadar fazla bellek ayırırsınız. InnoDB bu havuzda bellek kalmazsa, işletim sisteminden bellek ayırmaya başlar ve MySQL hata günlüğüne uyarı mesajları yazar. Varsayılan değer 8MB'dir.

innodb_additional_mem_pool_size= 8M

innodb_lock_wait_timeout : Bir InnoDB işleminin pes etmeden önce bir satır kilidi için beklediği saniye cinsinden süre. Varsayılan değer 50 saniyedir. Başka bir InnoDB işlemi tarafından kilitlenen bir satıra erişmeye çalışan bir işlem, aşağıdaki hatayı vermeden önce satıra yazma erişimi için en fazla bu saniye kadar bekler: ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

innodb_lock_wait_timeout = 60


Konfigürasyon:

-------------------

[mysqld]

key_buffer = 256M

max_allowed_packet = 256M

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M

innodb_buffer_pool_size = 5G

#innodb_additional_mem_pool_size = 8M

innodb_log_file_size = 128M

innodb_log_buffer_size = 8M

innodb_flush_log_at_trx_commit = 1

innodb_lock_wait_timeout = 60

query_cache_type = 1

query_cache_limit = 16M

query_cache_min_res_unit = 2k

query_cache_size = 256M

[mysqldump]

max_allowed_packet = 256M

[myisamchk]

key_buffer = 256M

sort_buffer_size = 20M

read_buffer = 4M

write_buffer = 4M

-------------------------------------

MySQL'de yaşanan en büyük performans sorunlarından biride gereksiz kaynak kullanımı, açılan bağlantıların kod içinden kapatılmamasıdır. Açılan tüm bağlantıları kapatmazsanız Mysql performansı zamanla düşer. PHP'de aşağıdaki komutu kullanarak bağlantıyı kapatabilirsiniz.

<?php
$mysqli = new mysqli("localhost","my_user","my_password","my_db");

if ($mysqli -> connect_errno) {
  echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
  exit();
}

// ....some PHP code...

$mysqli -> close();
?>

Tüm değişikliklerin server üzerinde nekadar kaynak RAM tüketeceğini görmek için aşağıdaki web sayfasını kullanabilirsiniz.

https://www.mysqlcalculator.com/ 




Python ile Twitter API Nasıl Kullanılır

TwitterSearch modülünü yükleyerek Twitter üzerinde arama yapabilirsiniz. İlk olarak bir Twitter Developer hesabı almalısınız. Bunun için developer.twitter.com adresine bir göz atın. Sonrasında aşağıdaki key bilgilerini portal üzerinden alın ve aşağıdaki koda uygulayın.

Modül yüklemek için

pip install TwitterSearch

Kod:

from TwitterSearch import *

try:

    tso = TwitterSearchOrder() # create a TwitterSearchOrder object

    tso.set_keywords(['bist', 'mavi']) # let's define all words we would like to have a look for

    tso.set_language('tr') # we want to see turkey tweets only

    tso.set_include_entities(False) # and don't give us all those entity information

    # it's about time to create a TwitterSearch object with our secret tokens

    ts = TwitterSearch(

        consumer_key = 'xxxxx',

        consumer_secret = 'xxxxx',

        access_token = 'xxxxx',

        access_token_secret = 'xxxxx'

    )

    n=0

     # this is where the fun actually starts :)

    for tweet in ts.search_tweets_iterable(tso):

        n=n+1

        #print(tweet)

        print(tweet['created_at'])

        print( '@%s tweeted: %s' % ( tweet['user']['screen_name'], tweet['text'] ) )

        print(n)

except TwitterSearchException as e:

    print(e)



Python da Pyinstaller ile Windows Exe nasıl yapılır.

 Python scriptlerinizi windows exe haline çevirmek için pyinstaller kullanabilirsiniz. İlk olarak Python için bu modülü kurmanız gerekmektedir.

pip install pyinstaller

Kurulumdan sonra py script dosyanızın bulunduğu dizine windows command da girin ve aşağıdaki gibi komutunuzu çalıştırın.

pyinstaller dosya.py

Windows yazılımınızı tek dosya olarak oluşturmak isterseniz.

pyinstaller dosya.py --onefile

Bu komut tek bir exe dosyası oluşturacaktır. Yazılımınızın içinde bir windows görseli tanımladıysanız aşağıdaki komutu kullanmanız gerekir.

pyinstaller --onefile --windowed dosya.py

veya

pyinstaller --windowed dosya.py

Oluşturduğunuz dosyaya birde icon görüntüsü eklemek isterseniz

pyinstaller -c -F -i "filepath.ico" dosya.py

Oluşturduğunuz exe dosyalarına dosyanızla aynı dizinde oluşan dist klasöründen ulaşabilirsiniz. Oluşturulan exe dosyasını çalıştırdığınızda hata alıyorsanız bilgisayarınıza Visual C++ Redistributable kurulu olduğundan emin olun.

Çalıştırdığınız exe dosyası aşağıdaki gibi bir hata veriyorsa

File "site-packages\pkg_resources\__init__.py", line 86, in <module>

ModuleNotFoundError: No module named 'pkg_resources.py2_warn'

Failed to execute script pyi_rth_pkgres

Yapmanız gereken komuta bir parametre eklemek olmalı.

pyinstaller dosya.py --onefile --hidden-import=pkg_resources.py2_warn

Bu hatayı alıyorsanız Pyinstaller yazılımınızı kaldırıp yeni versiyonunu da kurabilirsiniz.

pip uninstall pyinstaller

pip install pyinstaller

Pyinstoller ve Multiprocessing

Yazdığınız kod içerisinde multiprocessing modülünü kullanıyorsanız yaptığınız exe dosyasının windows işletim sisteminde sorunsuz çalışması için fonksiyonun altında aşağıdaki kodu kullanmalısınız. Bu kodu yazmazsanız windows içinde yazılımız için sürekli yeni prosesler açılacak ve yazılım çalışmayacaktır.

if __name__ == '__main__':

    # On Windows calling this function is necessary.

    # On Linux/OSX it does nothing.

    multiprocessing.freeze_support()



XAMPP Serverda MYSQL

 XAMPP server üzerinde MySQL Passwordünü değiştirmek için.

cd \xampp\mysql\bin

mysqladmin --user=root password "your_password"

Komutu kullanılır.


PHP ile Web Server Üzerinden Ping Atma

Aşağıdaki PHP kodunu kullanarak server üzerinden istediğiniz bir web adresi veya IP adresine ping atbilirsiniz. Bu kod windows bir web server için yazılmıştır. Kod da bulunan değişkenlerin değerini değiştirerek veya başka bir yerden bu koda göndererek istediğiniz yere ping atabilirsiniz.

<?php
$host="127.0.0.1";
$count="10";
$timeout="1000";
$size="32";
$ttl="128";
$output=shell_exec('ping -i '.$ttl.' -l '.$size.' -w '.$timeout.' -n '.$count.' '.$host);

echo "<pre>$output</pre>"; 

if (strpos($output, 'out') !== false) {
    echo "Dead";
}
    elseif(strpos($output, 'expired') !== false)
{
    echo "Network Error";
}
    elseif(strpos($output, 'data') !== false)
{
    echo "Alive";
}
else
{
    echo "Unknown Error";
}
?>

IPv4 ve IPv6 ayrımı için koda ekleme yapmak gerekir, default haliyle IP versiyon 4 çalışacaktır.

Dikkat! Bu kod komutları windows command prompt üzerinde çalıştırdığından web server için güvenlik açığı oluşturabilir. Sadece kendi kullanımınız için kullanmayı tercih edebilirsiniz.

Python Çoklu Fonksiyonları Aynı Anda Çalıştırma

Fonksiyonları aynı anda çalıştırmak için pythonda iki modülden de faydalanabiliriz. Multiprocessing ve Threading birbirinden farklı iki yapı fakat ikisiyle de bu işlem yapılabilir. 

Multiprocessing : Çalıştırılan fonksiyonları CPU üzerinde farklı proseslerle çalıştırır, her fonksiyonun ram CPU kullanımı birbirinden bağımsızdır. Bu modul aynı zamanda cihaz üzerinde CPU çekirdeklerinin her birine bir işlem atamak için de kullanılır. Böylece CPU'nun tüm çekirdekleri efektif olarak kullanılır ve hızlı bir şekilde işlemler yapılabilir.

Threading : Aynı proses içinde fonksiyonları çalıştırır, burada bir sıra söz konusudur. Aynı anda CPU üzerinde sadece bir işlem yapabilir dolayısıyla işleri sıraya koyarak yapar. Kullanımı basittir, belirli peryotlarda çalıştırılacak işler için idealdir.

Daha anlaşılır şekilde şöyle anlatabiliriz; Elinizde bir takım işler var markete gideceksiniz, aracınızı yıkamalısınız, yemek yapmalısınız. Multiprocessing çalıştığında bu işlerin herbirini farklı bir kişi yapar, Threading kullanıyorsanız tüm bu işleri aynı kişi yapar.

Python'da iki fonksiyonu aynı anda eş zamanlı çalıştırmak için aşağıdaki kodu kullanabilirsiniz. Kodu kullanmadan önce "threading" modülünü yüklediğinizden emin olun.


---
from threading import Thread

def func1():
    print('Working')

def func2():
    print("Working")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
---

Aşağıdaki kodu da kullanabilirsiniz.

---
from threading import Thread

def func1():

def func2():

t1 = Thread(target=func1)
threads = [t1]
t2 = Thread(target=func2)
threads += [t2]

t1.start()
t2.start()

for tloop in threads:
    tloop.join()

---

Bir diğer örnekte aşağıdaki gibi olabilir.

import threading

data_1=[1,2]
data_2=[2,3]
data_3=[3,4]

def fonksiyon(Data):
    print(Data)

    # Thread oluştur
    t1 = threading.Thread(target=fonksiyon, args=(data_1,))
    t2 = threading.Thread(target=fonksiyon, args=(data_2,))
    t3 = threading.Thread(target=fonksiyon, args=(data_3,))
 
    # Başlat
    t1.start()
    t2.start()
    t3.start()
 
    # Hepsi bitinceye kadar bekle.
    t1.join()
    t2.join()
    t3.join()

Aynı işlemi multiprocessing ile yaparsak aşağıdaki gibi kullanabiliriz. 
---

# importing the multiprocessing module 
import multiprocessing 
import os 
  
def worker1(): 
    # printing process id 
    print("ID of process running worker1: {}".format(os.getpid())) 
  
def worker2(): 
    # printing process id 
    print("ID of process running worker2: {}".format(os.getpid())) 
  
if __name__ == "__main__": 
    # printing main program process id 
    print("ID of main process: {}".format(os.getpid())) 
  
    # creating processes 
    p1 = multiprocessing.Process(target=worker1) 
    p2 = multiprocessing.Process(target=worker2) 
  
    # starting processes 
    p1.start() 
    p2.start() 
  
    # process IDs 
    print("ID of process p1: {}".format(p1.pid)) 
    print("ID of process p2: {}".format(p2.pid)) 
  
    # wait until processes are finished 
    p1.join() 
    p2.join() 
  
    # both processes finished 
    print("Both processes finished execution!") 
  
    # check if processes are alive 
    print("Process p1 is alive: {}".format(p1.is_alive())) 
    print("Process p2 is alive: {}".format(p2.is_alive())) 

---

Ayrıntılı bilgi

Python Modül Yükleme

Python'da yazdığınız kod için modül yüklemeye çalıştığınızda modül'ün bulunamadığı mesajı alıyorsanız modülün default'da yüklü olmadığı için yüklemeniz gerekir. Modül bilgisayarınıza yüklü ise komut satırında modülü yüklemeyi tekrar deneyin ör modülümüz dns.resolver olsun

import dns.resolver

Komut satırında aynı hatayı alıyorsanız ve modülün yüklü olduğundan eminseniz kodu kaydettiğiniz klasöre bakmanız gerekiyor. Klasör içerisinde dns.py isimli bir dosya varsa Pyhton modül kütüphanesine gitmez direk bu dosya içinde aradığınız modülü arar. Dolayısı ile bulamayacağı için hata verir. Python'da yüklediğiniz modüllerin dosya isimleri ile çakışmamasına dikkat edilmelidir.

Python import error

Dosya isismlerini kesinlikle modül isimleri ile aynı yapmayın, bu şekilde uygulandığında python dosyayı modul olarak görür ve yüklemeye çalışır, gerçek modüle ulaşamayacağı için yükleyemez.

Ör Selenium modülü için şöyle bir hata ile karşılaşabilirsiniz. Bu tüm modüller için geçerlidir.

runfile('C:/selenium.py', wdir='C:/')
Traceback (most recent call last):

  File "C:\selenium.py", line 10, in <module>
    from selenium import webdriver

ImportError: cannot import name 'webdriver' from 'selenium' (C:\selenium.py)

Firewall Üzerinden Internetten Modül Yükleme

Python Pip ile modul yüklemek için gerekli firewall erişimleri aşağıdaki gibidir. Eğer bir firewall arkasındaysanız ve çıkışınız kısıtlı ise aşağıdaki adresler için 80 ve 443 portlarını açtırmanız gerekir. 

Pip internet erişimi için firewall üzerinden yetki verilmesi gereken adresler:
pypi.python.org
pypi.org
pythonhosted.org
files.pythonhosted.org

Port TCP 80 ve 443 olmalıdır.


MySQL WorkBench Time Out

MySQL WorkBench kullanıcıları zaman zaman aşağıdaki hatayı görüyor, komutun defaultta 30 sn içinde cevap alamaması durumunda bu hata oluşmaktadır.

Error Code: 2013. Lost connection to MySQL server during query

Bu hatayı gidermek için 

 Edit → Preferences → SQL Editor → DBMS connection read time out (in seconds): 30

Değerini 180 yapabilirsiniz, bu durumda MySQL WorkBench komut çıktısını alana kadar bekleyecektir.

Raspberry PI Python 3,7 Kurulumu (Raspbian)

Raspbian üzerinde Python 2.7 ile gelmektedir. İlk olarak bu versiyonu Raspberry üzerinden kaldırmamız gerekiyor. Bunun için aşağıdaki komutu yazmamız yeterli.

sudo apt-get remove python2.7

Python 3.7'yi kurmak için aşağıdaki aşamaları izleyin.

sudo apt-get update

sudo apt-get install -y build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev libffi-dev

İnternetten kurulum dosyasını indirelim.

wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz

Yazılımı kuralım.

sudo tar zxf Python-3.7.0.tgz
cd Python-3.7.0
sudo ./configure
sudo make -j 4
sudo make altinstall

Kurulum sonrası versiyon kontrolü yapalım.

python3.7 -V

Şuanda python kuruldu fakat default isimle çağrılamamkta. Aşağıdaki işlemleri de yapalım

vim ~/.bashrc

Açılan dosyaya aşağıdaki satırı ekleyin.

alias python='/usr/local/bin/python3.7'

Komut satırında aşağıdaki komutu yazalım.

source ~/.bashrc

Ve kontrol edelim

python -V
Python 3.7.0

Kurulum tamamlandı. Şimdi gereksiz dosyalardan kurtulalım.

sudo rm -r Python-3.7.0
rm Python-3.7.0.tar.xz
sudo apt-get --purge remove build-essential tk-dev -y
sudo apt-get --purge remove libncurses5-dev libncursesw5-dev libreadline6-dev -y
sudo apt-get --purge remove libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev -y
sudo apt-get --purge remove libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev libffi-dev -y
sudo apt-get autoremove -y
sudo apt-get clean




Python Django Nasıl Kullanılır.

Python'da web geliştirme uygulaması Django'yu kurmak için aşağıdaki komutlar kullanılabilir.

Python Pip ile:
pip install django

Anaconda ile:
conda install -c anaconda django 

kurlum yapıldıktan sonra ilk olarak bir proje oluşturulur.

django-admin startproject PythonWebOne

Böylece PythonWebOne isimli bir proje oluşturmuş olduk. Proje komutu çalıştırdığınız dizinde oluşur ve dizinde aşağıdaki dosyalar bulunur.

PythonWebOne
├─PythonWebOne
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Tüm ayarlar settings.py dosyası içinden yapılır. Bu dosyada bazı ayarları değiştirelim.

LANGUAGE_CODE = 'tr-TR'

TIME_ZONE = 'Europe/Istanbul'

Django, kimlik doğrulama ve oturum yöneticisi uygulamaları gibi önceden yüklenmiş bazı varsayılan uygulamalarla birlikte gelir. Oluşturacağımız uygulamalar veya ihtiyacımız olacak üçüncü taraf uygulamaları Installed Apps bölümünde varsayılan uygulamalar yüklendikten sonra listenin altına eklenir.

# /settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Şimdi proje için bir uygulama oluştrumaya çalışalım. Proje klasörüne girip aşağıdaki komutu çalıştırın.

python manage.py startapp OneWeb

OneWeb isimli bir klasör oluşacaktır. Dizin yapısı aşağıdaki gibi olur.

PythonWebOne
├── PythonWebOne
│        ├── __init__.py
│        ├── settings.py
│        ├── urls.py
│        └── wsgi.py
├── OneWeb
│        ├── __init__.py
│        ├── admin.py
│        ├── apps.py
│        ├── migrations
│        ├── models.py
│        ├── tests.py
│        └── views.py
└── manage.py

Django'nun yeni uygulamamızı tanımasını sağlamak için, uygulama adını dosyamızdaki Installed Apps listesine eklememiz gerekir. Bu liste settings.py dosyasının içindedir.

# /settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'OneWeb'
]

Bu yapıldıktan sonra, sunucumuzu çalıştıralım ve neyin çıktı alacağını görelim. Django'nun, geliştirme sırasında yararlı olsa da, asla servis vermek için kullanılmaması gereken yerleşik bir web sunucusu ile geldiğini belirtmeliyiz. Sunucuyu aşağıdaki gibi çalıştırın:

python manage.py runserver

Komutu yazdıktan sonra aşağıdaki gibi bir mesaj çıkacaktır.

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January xxxxxxx
Django version 2.2.5, using settings 'PythonWebOne.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

Dikkatli bakarsanız, uygulanmadığınız taşıma işleminiz olduğuna dair bir uyarı görürsünüz. Şimdilik bunu görmezden gelin. Tarayıcınıza gidin http://127.0.0.1:8000/ adresine girin. Her şey yolunda giderse, Django karşılama sayfasını görmelisiniz.

Taşıma ile ilgili hatayı görmemek için aşağıdaki komutu kullanabiliriz.

python manage.py migrate

Aşağıdaki gibi bir çıktı görmelisiniz.

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK

Tekrar çalıştırdığınızda çıktı aşağıdaki gibi olur hata görmezsiniz

python manage.py runserver

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
January xxxx
Django version 2.2.5, using settings 'PythonWebOne.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

Sunucuyu çalıştırdığımızda, varsayılan Django sayfası gösterildi. Kendi uygulamanız için Django'ya ana sayfa şablonunu nerede arayacağını söyleyecek bir URL tanımlamamız gerekiyor. PythonWebOne klasörü içindeki urls.py isimli dosyayı açın . Böyle görünmeli.

from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

Haydi uygulamamız için kendi url linkimizi ekleyelim. Dosyayı bu şekilde görünecek şekilde düzenleyin.

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('OneWeb.urls')),
]

Uygulama klasörünün içine urls.py adlı bir dosya oluşturun ve aşağıdaki kodları dosya içerisine yazın.

from django.conf.urls import url
from OneWeb import views


urlpatterns = [
    url(r'^$', views.HomePageView.as_view()),
]

Uygulama altındaki views.py dosyasına bu kodu yazın.

from django.shortcuts import render
from django.views.generic import TemplateView

# Create your views here.
class HomePageView(TemplateView):
    def get(self, request, **kwargs):
        return render(request, 'index.html', context=None)

Bir klasör oluşturarak içine index.html dosyasını koyalım. Klasör adı templates olabilir. 

















Google