Kapsamlı Python proje kurulumu kılavuzu

Python, web siteleri oluşturmaktan karmaşık bilimsel araştırmalar yapmaya kadar her şey için kullanılan mükemmel bir dildir. Ancak projenizi hazırlamak zor olabilir. İşte bu rehber burada devreye giriyor! Bu yazıda size projenizi nasıl düzenleyeceğinizi, sanal ortamları nasıl kuracağınızı, bağımlılıkları nasıl yöneteceğinizi, kodunuzu biçimlendireceğinizi, kodunuzu test edeceğinizi ve daha fazlasını göstereceğiz. Python projenizi sıfırdan başlatmak ve sorunsuz bir şekilde yürütmek için bilmeniz gereken her şeyi ele alacağız.
Her şeyden önce, basit tutun
Python'un basit olması amaçlanmıştır. Bir Python REPL'de çalıştırın import this
ve The Zen of Python'u elde edeceksiniz.
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Aslında, okumaya karşı harcanan zamanın oranı 10'a 1'in oldukça üzerindedir. Yeni kod yazma çabasının bir parçası olarak sürekli olarak eski kodu okuyoruz. …[Dolayısıyla] okumayı kolaylaştırmak, yazmayı kolaylaştırır.
Kaynak: Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship
Bir Python projesi kurarken, bakımı yapılabilir kod yazma standardını belirlemek çok önemlidir - düşük bilişsel ek yüke sahip kod. Okuması kolay. Bulması kolay. Takip etmesi kolay.
Dizin yapısı
Bakımlı bir proje, ulaşılabilir bir dizin yapısıyla başlar. Buradaki (ve aslında her yerde) amacınız, geliştiricilerin kodun ne yaptığını anlamaları için sürtüşmeleri azaltmaktır.
- Projeniz için bir kök dizin kullanın. Projeniz için bir kök dizin oluşturun ve buna projenizin adını verin. Projenize mantıklı bir isim verin. Projeleri ve modülleri yaptıklarından sonra adlandırmayı tercih ederim ve şeyler için kod adları kullanmaktan kaçınırım.
- Kodunuz için alt dizinleri kullanın. Mantıksal bileşenlere veya modüllere dayalı olarak kodunuzu alt dizinler halinde düzenleyin. Örneğin, veri işleme kodunuz için bir alt dizine, görselleştirme kodunuz için bir alt dizine vb. sahip olabilirsiniz.
__init__.py
Modülleri içeren dizinlerde bir dosya kullanın . Python modüllerini içeren bir dizininiz varsa,__init__.py
dizine bir dosya ekleyin. Bu, Python'a dizinin bir paket olduğunu söyler ve paketten modülleri içe aktarmanıza izin verir.- Projeniz, dosyalarınız ve dizinleriniz için açıklayıcı adlar kullanın. Her modülün, dosyanın ve dizinin ne içerdiğini netleştiren açıklayıcı adlar kullanın. Bu, başkalarının kodunuzu anlamasını ve projenizde gezinmesini kolaylaştıracaktır (ve projenizi birkaç hafta bıraktıktan sonra sizin için daha kolay).
- Testlerinizi kodunuzun yanında tutun.
tests
Bazı mühendisler testlerini yazmak için bir dizin oluşturmayı sever . Testleri, test edilen kodun hemen yanında tutmayı tercih ederim. adlı bir dosyanız varsamodels/user.py
, test dosyasımodels/user_test.py
. Bu, kodunuzun ve testlerinizin nerede olduğunu netleştirir ve onları aynı bilişsel alanda tutmanıza olanak tanır. - Sanal bir ortam kullanın. Bağımlılıklarınızı yönetmek ve projenizin farklı ortamlarda tutarlı bir şekilde çalışmasını sağlamak için sanal bir ortam kullanın. Bunun hakkında daha sonra.
Sanal ortamlar
Sanal ortam, sisteminizdeki genel Python kurulumunu etkilemeden projeniz için paketler ve bağımlılıklar kurmanıza izin veren bağımsız bir Python ortamıdır. Sanal ortamlar önemlidir çünkü projenizin bağımlılıklarının farklı ortamlarda tutarlı olmasını sağlamaya yardımcı olarak projenizi yeniden oluşturmayı ve sürdürmeyi kolaylaştırır.
Projeniz için bir sanal ortam kurmak için Poetry , virtualenv veya conda gibi bir araç kullanabilirsiniz . Öğreticilerin ve kursların çoğu sanalenv kullanır, bu yüzden önce bundan bahsedeceğim.
Virtualenv kullanarak bir sanal ortamı nasıl kuracağınız aşağıda açıklanmıştır:
- virtualenv'i kurun. Virtualenv'i Python paket yöneticisi pip kullanarak kurabilirsiniz. Terminalinizi açın ve çalıştırın
pip install virtualenv
. - Sanal bir ortam oluşturun. Proje dizininize gidin ve çalıştırın
virtualenv venv
. Bu, geçerli dizinde adlı yeni bir sanal ortam yaratacaktırvenv
. - Sanal ortamı etkinleştirin. Sanal ortamı etkinleştirmek için
source venv/bin/activate
Linux/Mac veyavenv\Scripts\activate
Windows üzerinde çalıştırın.
Tüm Python projelerim için sanal ortamları yönetmek için Poetry kullanıyorum. İşte Şiir'in nasıl kullanılacağı:
- Şiir yükleyin. Poetry web sitesindeki kurulum talimatlarını takip ederek Poetry'i kurabilirsiniz .
- Yeni bir proje oluşturun. Projenizi oluşturmak ve çalıştırmak istediğiniz dizine gidin
poetry new myproject
.myproject
Bu , içinde temel bir proje yapısıyla adlandırılan yeni bir proje dizini yaratacaktır . - Sanal ortamı etkinleştirin. Projeniz için sanal ortamı etkinleştirmek üzere çalıştırın
poetry shell
. Bu, yeni bir sanal ortam yaratacak ve etkinleştirecektir. Bir komutu aktifleştirmeden sanal ortamda çalıştırmak istiyorsanız,poetry run <command>
aşağıdaki gibi kullanın:poetry run python main.py
- Paketleri ve bağımlılıkları kurun. Projeniz için paketleri ve bağımlılıkları yüklemek için
poetry add package_name
. Bu, paketi kuracak ve projenizin dosyasına ekleyecektirpyproject.toml
. Daha sonra bunun hakkında daha fazla bilgi.
Şiir hakkında daha fazla bilgi edinin →
VS Code kullanıyorsanız sanal ortamlara alternatif olarak Devcontainers'ı da kullanabilirsiniz. Geliştirici kapsayıcılar, Docker kapsayıcılarının içinde çalışan ve kodunuzu tutarlı bir ortamda geliştirmenize ve test etmenize olanak tanıyan önceden yapılandırılmış ortamlardır. 3 farklı işletim sistemine sahip birden fazla bilgisayarda çalıştığım için Devcontainers'ı tercih ediyorum. Poetry + Devcontainer kombinasyonu, kodumun farklı sistemlerde çalışmasını sağlamak için sıfır çaba harcadığım anlamına geliyor. Her zaman olur.
Dexter Williams'ın Python Devcontainers hakkında harika bir makalesi var . Git kontrol et →
Python 3 Geliştirici Konteynerlerine BaşlarkenBağımlılıklar
Proje bağımlılıkları, Python projenizin düzgün çalışması için kullandığı harici paketler veya kitaplıklardır (diğer kişilerin yazdığı kod). Bağımlılıklar, web çerçeveleri, veritabanı sürücüleri veya makine öğrenimi kitaplıkları gibi şeyleri içerebilir.
Python (ve diğer dillerin çoğu), diğer kitaplıklardan kendi kitaplıklarınıza kod kopyalamak yerine, pip
. Kurulum için uygun projeleri PyPI.org adresinde bulabilirsiniz .
pip
iyi bir araçtır. Ama bu basit. Tüm Python projelerimde poetry
bağımlılıkları yönetmek için kullanıyorum. Sanal ortamları yönetmek için kullandığım aracın aynısı.
Bu komutla Şiir'i kurun:
curl -sSL https://install.python-poetry.org | python3 -
poetry new myproject
cd myproject
poetry add requests
poetry
Seçimi kolaylaştıran birkaç özellik daha var . Dokümanlarında güncel bir özellik listesi var.

Şiir hakkında daha fazla bilgi edinin →
kod biçimlendirme
Kod biçimlendirme, girinti, satır aralığı ve adlandırma kuralları gibi şeyler de dahil olmak üzere kodun yapılandırılma ve biçimlendirilme biçimini ifade eder. Küçük bir ayrıntı gibi görünse de tutarlı ve iyi biçimlendirilmiş bir kod, bir projenin uzun vadeli sağlığı için esastır.
Tutarlı biçimde biçimlendirilmiş kod, kodunuzu kendiniz ve proje üzerinde çalışıyor olabilecek diğer geliştiriciler için daha okunabilir ve anlaşılır hale getirir. Kod tutarlı bir şekilde biçimlendirildiğinde, kod içindeki kalıpları ve yapıları tanımlamak daha kolay hale gelir. Tutarlı biçimde biçimlendirilmiş kodun okunması, anlaşılması ve bakımı daha kolaydır
Bob Martin'den alıntımızı hatırlıyor musunuz? Kod okumak, yazmaktan daha fazla zaman harcanır. Bu kod tutarlı bir şekilde biçimlendirilirse, okumak çok daha kolaydır.
Bu amaçla, her zaman kullanırım black
. Orada başka biçimlendiriciler var. Ve black
çok yapılandırılabilir değil. Ama satış noktası bu. Benimsemeyi seçen herhangi bir ekip, black
her yerde tamamen aynı görünen bir kod alacaktır. Artık biçimlendirme hakkında tartışmak yok çünkü seçim çoktan yapıldı. Ve şimdiye kadar kullandığım her kod düzenleyiciyle bütünleşiyor.
poetry add black --group dev
Siyah'ı kullanarak , elle biçimlendirmenin ayrıntıları üzerindeki denetimi devretmeyi kabul etmiş olursunuz. Buna karşılık, Siyah sizepycodestyle
hız, determinizm ve biçimlendirme konusunda dırdır etmekten kurtulma özgürlüğü verir . Daha önemli konular için zamandan ve zihinsel enerjiden tasarruf edeceksiniz.
Siyah hakkında daha fazla bilgi edinin →
Kod astarı
Kod dizme ve kod biçimlendirme birbiriyle ilişkilidir ancak aynı şey değildir.
Kod biçimlendirme, girinti, satır aralığı ve adlandırma kuralları gibi şeyler de dahil olmak üzere kodun yapılandırılma ve biçimlendirilme biçimini ifade eder. Kodun okunmasının ve anlaşılmasının kolay olduğundan emin olmakla ilgilidir, bu da zaman içinde hata ayıklamayı ve bakımı kolaylaştırabilir.
Öte yandan, kod dizimi, olası hatalar veya sorunlara neden olabilecek sorunlar için kodun analiz edilmesini içerir. Linters, sözdizimi hataları, kullanılmayan değişkenler ve diğer olası hatalar gibi şeylere bakar ve bunların nasıl düzeltileceğine dair öneriler sağlayabilir.
Linting aracım pylint
. Olası hataları ve sorunları belirlemek için Python kod tabanınızı analiz eder. Pylint, kod tabanınızın genel kalitesini temsil eden bir puanla birlikte bu sorunların nasıl çözüleceğine dair öneriler de sunar. Bu puan, kodunuzun iyileştirilebileceği alanları belirlemenize ve zaman içinde bakımını kolaylaştırmanıza yardımcı olmak için bir kıyaslama olarak kullanılabilir.
poetry add pylint --group dev
pylint
ile kullanmablack
Çakışan araçları kullanırken mutlaka birkaç çakışma yaşarsınız. Black bunu belgelerinde dile getiriyor ve çözümü sunuyor: net yapılandırma.
Bugün itibariyle, Pylint ve Black arasında çelişen tek bir stil görüşü var: çizgi uzunluğu. NET dosyanızda Pylint için ayarlayabilirsiniz pyproject.toml
.
# pyproject.toml
[tool.pylint.format]
max-line-length = "88"
Pylint hakkında daha fazla bilgi edinin →
Test yapmak
- test neden önemlidir
- Yazabileceğiniz test türleri (ör. birim testleri, entegrasyon testleri)
- Test için kullanabileceğiniz araçlar (örn. pytest, unittest)
- Test yazmak ve düzenlemek için en iyi uygulamalar
Python'da sağlam test için fiili standart Pytest'tir . Pytest, ayrıntılı test hatası çıktısı ve basit bir API gibi güçlü özelliklerle birlikte gelir. Ayrıca Django, Jupyter ve daha onlarca Python aracıyla entegre olur.
poetry add pytest --group dev
- Bir test çerçevesi kullanın. Python'da birkaç tane var, ancak Pytest'i kullanmanızı şiddetle tavsiye ediyorum. Bir test çerçevesi kullanmak, testlerinizi yazmayı ve yönetmeyi kolaylaştırır.
- Her işlev ve yöntem için testler yazın. Amaçlandığı gibi çalıştıklarından emin olmak için kod tabanınızdaki her işlev ve yöntem için testler yazın. Bu, işler değiştikçe kod tabanınızdaki sorunları tanımlamayı ve düzeltmeyi kolaylaştırır.
- Açıklayıcı test adları kullanın. Her teste, neyi test ettiğini açıklayan bir ad verin (örn.
test_user_can_authenticate
). Bu, her bir testin ne yaptığını anlamayı kolaylaştırır ve sorunların daha hızlı belirlenmesine yardımcı olabilir. - Kurulum ve ayırma yöntemlerini kullanın. Gerekli test armatürlerini ayarlamak ve her testten sonra temizlemek için kurulum ve sökme yöntemlerini kullanın. Bu, testlerin temiz bir ortamda yapılmasını ve önceki testlerden kalan yan etkilerin olmamasını sağlar.
- Testlerinizi test takımları halinde düzenleyin. Testlerinizi amaçlarına veya işlevlerine göre test paketleri halinde düzenleyin. Bu, belirli testleri (veya test gruplarını) çalıştırmayı kolaylaştırır ve sorunları daha hızlı belirleyebilir.
Sürekli Entegrasyon (CI) ve Sürekli Dağıtım (CD), kod değişikliklerini oluşturmayı, test etmeyi ve dağıtmayı otomatikleştiren süreçlerdir. CI, kod değişikliklerini kod deposuna işlendiği anda otomatik olarak oluşturma ve test etme işlemidir. CD, CI testlerini geçtikten sonra kod değişikliklerini üretim veya hazırlama ortamlarına otomatik olarak dağıtma işlemidir.
CI/CD (kavram olarak birlikte) önemlidir çünkü sorunları geliştirme sürecinin başlarında yakalar ve kod değişikliklerinin üretime güvenle uygulanmasını sağlar. Başarının anahtarı, bu araçların değişiklikleri otomatik olarak oluşturması, test etmesi ve devreye almasıdır . Geliştiricilerin her değişiklikten sonra bu işlemleri manuel olarak uygulamayı hatırlamaları gerekmez ve seçim yapma hakları yoktur. Sadece olur ve sadece çalışır.
Pek çok CI/CD aracı vardır ve kullanım durumunuz için en iyisi muhtemelen Git satıcınızla (GitHub, GitLab, Bitbucket, vb.) en sıkı şekilde entegre olandır. Süreç herhangi bir platform için aynıdır.
- CI/CD işlem hattınızı planlayın. Bu genellikle “Yap → Test Et → Dağıt” şeklinde görünür. Bu adımlardan bazıları birden fazla alt adım içerebilir. Örneğin, "Test" adımı "Birim testleri", "Entegrasyon testleri" ve "Linter kontrolleri" içerebilir.
- İşlem hattınızı yapılandırma dosyalarında tanımlayın. Bu dosyalar projenize bağlanır ve CI/CD işlem hattınızın kod tanımlarıdır. Okunabilir hale getirin! GitHub Actions , GitLab Pipelines veya CircleCI belgelerini okuyun . Başka büyük projeler de var.
- Kod işleyerek işlem hattınızı test edin. Konfigürasyonunuzu test etmek, genellikle projenize yeni taahhütler yoluyla çalıştırmak anlamına gelir. Çıktının beklediğiniz gibi olup olmadığını kontrol edin ve yapılandırma dosyalarını gerektiği gibi ayarlayın.
Seviye Atlama Kodlama
Topluluğumuzun bir parçası olduğunuz için teşekkürler! Gitmeden önce:
- Hikaye için alkışlayın ve yazarı takip edin
- Seviye Atlama Kodlama yayınında daha fazla içerik görüntüleyin
- Ücretsiz kodlama mülakat kursu ⇒ Kursu Görüntüle
- Bizi takip edin: Twitter | LinkedIn | Bülten