12. Sanal Ortamlar ve Paketler
12.1. Tanıtım¶
Python uygulamaları genellikle standart kütüphanenin bir parçası olmayan paketleri ve modülleri kullanır. Uygulama bazen kütüphanenin spesifik bir sürümüne ihtiyaç duyar, çünkü uygulama belirli bir hatanın düzeltilmiş olmasını veya uygulamanın kütüphanenin arabiriminin eski bir sürümü kullanılarak yazılmasını gerektirebilir.
Bu, bir Python yüklemesinin, her uygulamanın gereksinimlerini karşılamasının mümkün olmayabileceği anlamına gelir. Bir A uygulaması belirli bir modülün 1.0 sürümüne, bir B uygulaması ise 2.0 sürümüne ihtiyaç duyuyorsa, sürümlerin farklı olmasından dolayı versiyon 1.0 veya 2.0’ı yüklemek A veya B uygulamasından birini çalışmaz hale getirecektir.
Bu sorunun çözümü, spesifik bir Python sürümü için Python yüklemesi ve bir dizi ek paket içeren bağımsız bir dizin ağacı olan virtual environment (sanal ortam) oluşturmaktır.
Bu sayede farklı uygulamalar farklı sanal ortamlar kullanabilir. Çakışan gereksinimlerin önceki örneğini çözmek için, A uygulamasının sanal ortamında sürüm 1.0 yüklüyken, B uygulamasının sanal ortamında sürüm 2.0 yüklü olabilir. B uygulaması bir kitaplığın sürüm 3.0’a yükseltilmesini gerektiriyorsa, bu uygulama A’nın ortamını etkilemez.
12.2. Sanal Ortamlar Oluşturma¶
The module used to create and manage virtual environments is called
venv. venv will install the Python version from which
the command was run (as reported by the --version option).
For instance, executing the command with python3.12 will install
version 3.12.
Sanal ortam oluşturmak için, yerleştirmek istediğiniz dizine karar verin ve venv modülünü dizin yolu ile bir komut dosyası olarak çalıştırın:
python -m venv tutorial-env
Bu, eğer yoksa tutorial-env dizinini oluşturur ve ayrıca Python derleyicisinin bir kopyasını ve çeşitli destekleyici dosyaları içeren dizinler oluşturur.
Sanal ortam için ortak bir dizin konumu .venv ‘dir. Bu ad, dizini genellikle kabuğunuzda gizli tutar ve böylece dizinin neden var olduğunu açıklayan bir ad verirken aradan uzak tutar. Ayrıca, bazı araç çalıştırmanın desteklediği .env ortam değişkeni tanım dosyalarıyla çakışmayı önler.
Sanal bir ortam oluşturduktan sonra onu etkinleştirebilirsiniz.
Windows’da çalıştır:
tutorial-env\Scripts\activate
Unix veya MacOS’ta çalıştır:
source tutorial-env/bin/activate
(Bu komut dosyası bash kabuğu için yazılmıştır. Eğer csh veya fish kabuklarını kullanıyorsanız, bunun yerine activate.csh veya activate.fish komut dosyalarını kullanmanız gerekmektedir.)
Sanal ortamı etkinleştirmek, hangi sanal ortamı kullandığınızı göstermek için kabuğunuzun görünüşünü değiştirir ve ortamı değiştirerek python komutunun belirlediğiniz spesifik Python kurulumunu ve sürümünü çalıştırmasını sağlar. Mesela:
$ source ~/envs/tutorial-env/bin/activate (tutorial-env) $ python Python 3.5.1 (default, May 6 2016, 10:59:36) ... >>> import sys >>> sys.path ['', '/usr/local/lib/python35.zip', ..., '~/envs/tutorial-env/lib/python3.5/site-packages'] >>>
Bir sanal ortamı devre dışı bırakmak için şunu yazın:
terminalin içine.
12.3. Paketleri pip ile Yönetme¶
pip adlı bir program kullanarak paketleri yükleyebilir, yükseltebilir ve kaldırabilirsiniz. Varsayılan olarak pip, Python Paket Dizini ‘nden paketler yükler. Python Paket Dizini’ne web tarayıcınızdan giderek göz atabilirsiniz.
pip bir dizi alt komut içerir: “install” (yükle), “uninstall” (kaldır), “freeze” (dondur), vb. (pip için eksiksiz dokümantasyon için Python Modüllerini Kurmak rehberine bakın.)
Paketin adını belirterek paketin en son sürümünü yükleyebilirsiniz:
(tutorial-env) $ python -m pip install novas Collecting novas Downloading novas-3.1.1.3.tar.gz (136kB) Installing collected packages: novas Running setup.py install for novas Successfully installed novas-3.1.1.3
Paketin belirli bir sürümünü, paket adını ve ardından == ve sürüm numarasını vererek de yükleyebilirsiniz:
(tutorial-env) $ python -m pip install requests==2.6.0 Collecting requests==2.6.0 Using cached requests-2.6.0-py2.py3-none-any.whl Installing collected packages: requests Successfully installed requests-2.6.0
Bu komutu tekrar çalıştırırsanız, pip istenen sürümün kurulu olduğunu fark edecek ve hiçbir şey yapmayacaktır. Bu sürümü almak için farklı bir sürüm numarası sağlayabilir veya paketi en son sürüme yükseltmek için python -m pip install --upgrade komutunu çalıştırabilirsiniz:
(tutorial-env) $ python -m pip install --upgrade requests Collecting requests Installing collected packages: requests Found existing installation: requests 2.6.0 Uninstalling requests-2.6.0: Successfully uninstalled requests-2.6.0 Successfully installed requests-2.7.0
python -m pip uninstall ve ardından gelen bir veya daha fazla paket adı, paketleri sanal ortamdan kaldıracaktır.
python -m pip show belirli bir paket hakkındaki bilgileri görüntüleyecektir:
(tutorial-env) $ python -m pip show requests --- Metadata-Version: 2.0 Name: requests Version: 2.7.0 Summary: Python HTTP for Humans. Home-page: http://python-requests.org Author: Kenneth Reitz Author-email: me@kennethreitz.com License: Apache 2.0 Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages Requires:
python -m pip list sanal ortamda yüklü olan tüm paketleri gösterecektir:
(tutorial-env) $ python -m pip list novas (3.1.1.3) numpy (1.9.2) pip (7.0.3) requests (2.7.0) setuptools (16.0)
python -m pip freeze yüklü paketlerin benzer bir listesini üretecektir, ancak çıktı python -m pip install’ın beklediği biçimi kullanır. Genel bir kullanım bu listeyi bir requirements.txt dosyasına koymaktır:
(tutorial-env) $ python -m pip freeze > requirements.txt (tutorial-env) $ cat requirements.txt novas==3.1.1.3 numpy==1.9.2 requests==2.7.0
requirements.txt daha sonra sürüm denetimine kaydedilebilir ve bir uygulamanın parçası olarak gönderilebilir. Kullanıcılar daha sonra gerekli tüm paketleri install -r ile yükleyebilir:
(tutorial-env) $ python -m pip install -r requirements.txt Collecting novas==3.1.1.3 (from -r requirements.txt (line 1)) ... Collecting numpy==1.9.2 (from -r requirements.txt (line 2)) ... Collecting requests==2.7.0 (from -r requirements.txt (line 3)) ... Installing collected packages: novas, numpy, requests Running setup.py install for novas Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0
pip has many more options. Consult the Python Modüllerini Kurmak
guide for complete documentation for pip. When you’ve written
a package and want to make it available on the Python Package Index,
consult the Python packaging user guide.