Geliştiriciler olarak, projelerimizin verimli ve düzenli bir şekilde yönetilmesi için bazı araçlara ihtiyaç duyarız. Bu araçlardan biri de .gitignore dosyasıdır. Bu makalede, Python projelerinde .gitignore dosyasının önemini, nasıl oluşturulacağını ve örneklerini inceleyeceğiz. Ayrıca, Python Gitignore örneklerini de paylaşacağız.
.gitignore Dosyası Nedir?
.gitignore dosyası, Git versiyon kontrol sistemi kullanarak projelerinizi yönetirken hangi dosya ve klasörlerin izlenmeyeceğini belirten bir yapılandırma dosyasıdır. Bu dosya sayesinde, gereksiz veya hassas bilgileri içeren dosyaları git deposuna eklemeden hariç tutabiliriz.
Örneğin; geçici dosyalar, derleme çıktıları, oturum açma bilgileri, API anahtarları ve sistem dosyaları gibi izlenmesini istemediğimiz dosyaları kolayca hariç tutabiliriz. Böylece projemizin güvenliğini artırabilir ve depomuzun gereksiz yere büyümesini engelleyebiliriz.
Python Projeleri İçin Neden Önemlidir?
Python projeleri, çeşitli paketler, kütüphaneler ve çalışma ortamları gerektirebilir. Bu durum, projenin yapısı ve içerdiği dosyalar açısından bazı karmaşıklıklara yol açabilir. .gitignore dosyası, bu karmaşıklıkları yönetmek ve projenizin temiz bir şekilde sürdürülmesine yardımcı olmak için kritik bir öneme sahiptir.
İşte Python projelerinde .gitignore dosyasının önemini vurgulayan bazı noktalar:
- Sensitif Bilgilerin Korunması: API anahtarları, şifreler ve kullanıcı bilgileri gibi hassas verileri içeren dosyaların yanlışlıkla paylaşılmasını engeller.
- Gereksiz Dosyaların Hariç Tutulması: Geçici dosyalar, test sonuçları veya derleme çıktıları gibi gereksiz dosyaların versiyon kontrolüne dahil edilmesini önler.
- Kütüphane ve Paket Yönetimi: Python projeleri genellikle harici kütüphanelere bağımlıdır. Bu bağımlılıkların yönetiminde .gitignore dosyası önemli bir rol oynar.
- İşbirliği Kolaylığı: Takım arkadaşlarınızla çalışırken, her birinizin kendi geliştirme ortamına özgü dosyaların paylaşılmaması işbirliğini kolaylaştırır.
Tüm bu nedenlerle, Python projelerinizde doğru bir şekilde yapılandırılmış bir .gitignore dosyası bulundurmak büyük önem taşır.
.gitignore Dosyasını Nasıl Oluşturabilirsiniz?
.gitignore dosyasını oluşturmak oldukça basittir. İşte adım adım nasıl yapacağınız:
- Adım 1: Proje Klasörünüze Git Konfigürasyonunu Başlatın
- Adım 2: Yeni .gitignore Dosyası Oluşturun Adım 3: İlgili Dosya ve Klasörleri Hariç Tutma Kurallarını Ekleyin Adım 4: Dosyayı Kaydedin ve Git’e Ekleme Kontrolü Yapın
Adım 1: Proje Klasörünüzde Terminal veya Komut İstemcisi Açın ve Aşağıdaki Komutu Girin:
git init
Adım 2: Proje Klasörünüzde .gitignore Adında Yeni Bir Dosya Oluşturun:
touch .gitignore
Adım 3: .gitignore Dosyasını Bir Metin Düzenleyici ile Açın ve Hariç Tutmak İstediğiniz Dosya veya Klasörleri Ekleyin:
# python bytecode files
*.pyc
# package managers
Pipfile.lock
# mypy
.mypy_cache/
# pytest cache
.cache/
pytest.debug
# IDEs and editors
.vscode/
.idea/
bin/
dist/
Adım 4: Değişiklikleri Kaydedin ve Aşağıdaki Komutla Git’e Ekleyin:
git add .gitignore
Artık .gitignore dosyanız hazır ve projenizde hangi dosya veya klasörlerin izleneceğini kontrol edebilirsiniz!
Python Projesi için Örnek .gitignore Dosyası Nasıl Oluşturulur?
Peki, bir Python projesi için .gitignore dosyasını nasıl oluşturabiliriz? İşte adım adım rehberimiz:
- Klasör Oluşturma: İlk olarak, projeniz için bir klasör oluşturun veya mevcut bir projeyi seçin.
- Aşağıdaki İçeriği Kopyalayın:
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*.pyo
*.pyd
# C extensions
*.so
# Distribution / packaging
.Python
env/
env.bak/
venv/
v*/
dist/
build/
pip-wheel-metadata/
bdist_wheel/
wheelhouse/
*.egg-info/
bin/
dist-info/
library.zip
grain/versions.txt
grain/requirements.txt
grain/requirements.lock
test-requirements.txt
tests-requirements.txt
*.egg
docs/_build/
# Pytest
.cache/
badge.svg
test-results.xml
test-reports/
test-results/*.xml
test-results/junit-*.xml
test-results/*.html
test-results/*.json
test-results/*.log
test-results/*.txt
test-results/pytest*.json
test-reports/junit-*.xml
test-reports/*.xml
test-results/junit-*.xml
test-results/*.xml
test-reports/*.txt
test-reports/*.log
test-results/*/junit-*.xml
test-reports/*/junit-*.xml
grain/.tox/
grain/.coverage*
grain/.pytest_cache/
grain/.hypothesis/
grain/.mypy_cache/
grain/.ruff_cache/
grain/.pytest_vars/
grain/.coverage*
grain/.pytest_cache/
grain/.hypothesis/
grain/.mypy_cache/
grain/.ruff_cache/
grain/.pytest_vars/
grain/.coverage*
grain/.pytest_cache/
grain/.hypothesis/
grain/.mypy_cache/
grain/.ruff_cache/
grain/.pytest_vars/*
*.cover
coverage.xml
coverage_html_report/
documentation/coverage.html
coverage/*
# Pyre type checker
.pyre_configuration.json
.pyre_configuration.old.json
.pyre_check_out.json
.pyre_check_out.old.json
.pyre_directory/
buck-out/
buck-cache/
buck-ignore/.
buck-out/**/*.*
distribution.zip
.docker/**/requirements.txt
distribution.zip
docker/**/requirements.txt
distribution.zip
.docker/**/requirements.txt # mypy cache,
mypy.ini,
mypy.ini.bak,
mypy.cache/,venv/,env/,env.bak/,venv.bak/,venv.old/,test-results/junit-*.xml,test-results/*.xml,
tests/test-results/*.xml,test-results/*.html,test-results/*.json,test-results/*.log,test-results/*.txt,
tests/test-results/junit-*.xml,test-reports/junit-*.xml,test-reports/*.xml,
tests/test-reports/*.txt,test-reports/*.log,
cache/,dist/*,build/*,
docs/_build/*,dist-info/*,
doc/,docs/README.md,
docs/index.rst,
docs/Makefile,
docs/make.bat,
docs/pydocstyle.ini,
docs/sphinx.conf,
docs/sphinx-apidoc.conf,
docs/.warnings.txt,
docs/.check.yaml,
docs/.check.yml,
grain/.tox,
grain/.coverage*
grain/.pytest_cache,
grain/.hypothesis,
grain/.mypy_cache,
grain/.ruff_cache,
grain/.pytest_vars,
grain/cypress.config.js,
grain/README.md,
grain/Makefile,
grain/make.bat,
grain/pydocstyle.ini,
grain/sphinx.conf,
grain/tests/test/**/results.json
- Dosyanın Adını Belirleme: Bu içeriği kopyaladıktan sonra, boş bir metin belgesine yapıştırın ve .gitignore olarak kaydedin (nokta ile başlamasına dikkat edin).
- Dizin Seçimi: Eğer .gitignore dosyasını belirli bir dizinde oluşturacaksanız, o dizinin içerisine gitmeniz gerekiyor. Eğer kök dizinde oluşturuyorsanız dizin değiştirmenize gerek yok.
- Dikkat Edilmesi Gerekenler:
- Aynı dizinde başka bir
.gitignore
dosyası varsa, oluşturduğunuz bu dosya diğerinin üstüne yazılabilir. - Bazı IDE’ler otomatik olarak bir
.gitignore
dosyası oluşturabilir. Bu yüzden oluşturduğunuz.gitignore
‘un var olup olmadığını kontrol edin.
Tüm bu adımları takip ederek Python projeniz için etkili bir .gitignore dosyası oluşturabilirsiniz!
Pipfile.lock Neden Güncellenmelidir?
Pipfile.lock dosyası, Python projelerindeki bağımlılıkların sürüm bilgilerinin tutulduğu bir yapılandırma dosyasıdır. Bu dosyanın güncellenmesi, projelerinizin düzgün çalışabilmesi için kritik öneme sahiptir. İşte Pipfile.lock dosyasının güncellenmesi gereken durumlar ve nedenleri:
- Pipfile Güncellemeleri: Eğer Pipfile dosyanızda değişiklik yaptıysanız (örneğin yeni bağımlılıklar eklediyseniz veya mevcut bağımlılıkların sürümlerini değiştirdiyseniz), bu değişikliklerin yansıtılması için Pipfile.lock dosyasının güncellenmesi gerekir.
- Kütüphane Güncellemeleri: Eğer projede kullanılan kütüphaneler güncellendiyse (örneğin güvenlik açıkları giderildiyse veya yeni özellikler eklendiyse), bu güncellemelerin yansıtılması için Pipfile.lock dosyasının güncellenmesi gerekir.
Pipfile.lock dosyasının güncellenmemesi durumunda şu sorunlar ortaya çıkabilir:
- Tutarsız Bağımlılıklar: Projenizin farklı ortamlarında (örneğin geliştirme, test veya üretim ortamlarında) farklı bağımlılık sürümlerinin kullanılmasına neden olabilir.
- Kullanılamayan Bağımlılıklar: Eğer Pipfile.lock dosyasını güncellemeyi unutursanız, projede kullanılmayan bağımlılıkların hala yüklü olmasına neden olabilir.
Pipfile.lock dosyasını güncellemek için aşağıdaki adımları takip edebilirsiniz:
Pipfile
‘da değişiklik yaptıysanız veya kütüphaneleri güncellediyseniz, terminalde aşağıdaki komutu çalıştırarak Pipfile.lock dosyasını güncelleyebilirsiniz:
pipenv lock --clear --verbose --requirements --dev > Pipfile.lock
Ayrıca Pipfile.lock
‘ta değişiklik yapmak istemiyorsanız sadece şu komutu çalıştırabilirsiniz:
pipenv update --dev --verbose --clear --outdated --prune
Pipfile.lock ile requirements.txt Arasındaki Farklar Nelerdir?
Pipfile.lock ve requirements.txt dosyaları, Python projelerinin bağımlılıklarını yönetmede önemli rol oynayan iki farklı yapılandırma dosyasıdır. Ancak aralarında bazı temel farklar bulunmaktadır.
Pipfile.lock Nedir?
Pipfile.lock, pipenv tarafından kullanılan bir yapılandırma dosyasıdır. Bu dosya, projenizdeki tüm bağımlılıkların tam sürüm numaralarını içerir. Örneğin, projenizde kullanılan kütüphanelerin hangi sürüm numarasının kullanıldığını gösterir.
Pipfile.lock Özellikleri:
- Tüm bağımlılıkların tam sürüm numaralarını içerir (örneğin Flask==2.0.0).
- Sadece proje tarafından doğrudan kullanılan bağımlılıkları değil, aynı zamanda dolaylı bağımlılıkları da içerir.
- Pipfile.lock’ı otomatik olarak oluşturur ve günceller.
requirements.txt Nedir?
requirements.txt, pip tarafından kullanılan bir yapılandırma dosyasıdır. Bu dosya da projenizdeki bağımlılıkların sürüm bilgilerini içerir ancak tam sürüm numaralarını içermez.
requirements.txt Özellikleri:
- Tüm bağımlılıkların tam sürüm numaralarını içermez (örneğin Flask>=1.0.0).
- Sadece proje tarafından doğrudan kullanılan bağımlılıkları içerir (dolaylı bağımlılıklar yoktur).
- Kullanıcı tarafından manuel olarak oluşturulur ve güncellenir.
Pipfile.lock ve requirements.txt Arasındaki Farklar:
- Pipfile.lock, tam sürüm numaralarını içerirken requirements.txt bunu yapmaz.
- Pipfile.lock tüm bağımlılıkları içerirken requirements.txt sadece doğrudan kullanılanları içerir.
- Pipfile.lock otomatik olarak oluşturulur ve güncellenirken requirements.txt manuel olarak oluşturulur ve güncellenir.
Kısacası;
- Pipfile.lock otomatik olarak güncellenen bir yapılandırma dosyasıdır ve tam sürüm numaralarını içerirken; requirements.txt manuel olarak güncellenen bir yapılandırma dosyasıdır ve tam sürüm numaralarını içermez.
Pip freeze Nedir?
Pip freeze komutu, Python paket yöneticisi olan pip’in yüklü paketlerin listesini görüntülemek için kullandığı bir komuttur. Bu komut sayesinde sisteminizde yüklü olan tüm Python paketlerinin isimlerini ve versiyon numaralarını görebilirsiniz.
Pip freeze Neden Kullanılır?
- Paket Sürümü Bilgisi Alma: Yüklü paketlerin isimlerini ve versiyon numaralarını görüntüleyerek hangi sürümlerin yüklü olduğunu öğrenebilirsiniz.
- Kullanıcı İzinleri Alma: Bazı sistemlerde pip freeze komutunu çalıştırmak için yönetici izinlerine ihtiyaç duyabilirsiniz.
Pip freeze Ne Zaman Kullanılır?
- Sistem Geçmişini İnceleme: Yüklü paketlerin geçmişini incelemek istediğinizde pip freeze komutunu kullanabilirsiniz.
- Sürüm Kontrol Listesi Oluşturma: Projelerinizde kullanılan paketlerin sürüm bilgilerini kaydetmek istediğinizde pip freeze komutunu kullanarak requirements.txt dosyasını oluşturabilirsiniz.
Pip freeze Çıktısı Nedir?
Pip freeze çıktısı, sisteminizde yüklü olan tüm Python paketlerinin isimlerini ve versiyon numaralarını gösteren metin tabanlı bir listedir. Örneğin:
PackageName==X.Y.Z
X.Y.Z: Yüklü paketlerin versiyon numarasıdır.
Pip freeze ile Pip list Arasındaki Farklar Nelerdir?
- Pip list ile pip freeze komutları benzer işlevlere sahiptir ancak aralarında bazı farklar bulunmaktadır;
- Pip list komutu, yüklü paketlerin isimlerini ve versiyon numaralarını listeleyen bir komuttur ancak pip freeze çıktısında ek olarak paketlerin özetlerini de gösterir.
- Pip freeze çıktısı daha detaylı bilgiler sunarken pip list çıktısı daha sade bilgiler sunar.