Python Modüllerini Dosya Olarak Projeye Nasıl Dahil Edebilirim?

Merhaba arkadaşlar malumunuz pip ile modülleri yüklüyoruz fakat başka bir cihazda bu modül yok ise program çalışırken hata veriyor. Örnek vermek gerekir ise ben “lib” diye bir klasör yapıp modülleri oraya atmak istiyorum. Oradan import ederek programımla birlikte kullanıcıya yollamak istiyorum. Modülleri indirebileceğimiz bir yol veya bir sistem var mıdır? Şimdiden teşekkürler.

Merhaba,

Programınızda kullanacağınız modüllerin isimlerini requirements.txt isminde bir dosyaya kaydedebilirsiniz.

Örnek:

requirements.txt

# Bir kütüphanenin belirli bir sürümün 
# yüklenmesini sağlayabilirsiniz.
numpy==1.5 
# Kütüphanenin hangi sürümde yüklenmesi önemli
# değilse, sadece adını da yazabilirsiniz.
pillow
# Bazı özel koşullara göre kütüphanelerin
# yüklenmesini sağlayabilirsiniz.
xlrd ; sys_platform == 'win32' and python_version == '3.8' 

Kullanıcıya requirements.txt'i aşağıdaki gibi yüklemesini söylersiniz.

pip install -r requirements.txt

Aşağıdaki bağlantıya da bakabilirsiniz.
https://pip.pypa.io/en/stable/reference/pip_install/#requirement-specifiers

Aslında os modülü ile benzerini yüklemiştim fakat öyle kullanıcılar var ki bırakın pip olayını python ne blmiyor. O yüzden direkt içerisinde olmasını istiyorum dosyaların.

Merhaba,

Python’da benzer sıkıntıyı ben de yaşıyorum. Çözümüm kullandığım Python dizinini olduğu gibi diğer makinaya aktarıp requirements.txt çalıştırmak. Bunu yapınca lib klasörünü de diğer makinaya aktarmış olup sorunsuz şekilde kullanabiliyorum. Yalnıza libs klasörünü aktarınca sürüm vb. hatalar çıkıyor onları çözmek için de ekstra uğraşıyorsun.

1 Beğeni

pip’in çalışması için python’nun yüklü olması gerekiyor, python yüklü ise zaten pip’i program kendi çalıştırarak gerekli yüklemeleri yapabilir.

Haklısınız, tabi ki öyle de yapabilir.

Şöyle yapabilirsiniz.
Python dosyanızı çalıştırılabilir hale getirin. Pyinstaller programın gereksinim duyduğu kütüphaneleri tespit eder ve modülleri de dist klasörünün içine ekler. Bazı kütüphanelerin bütün dosyaları pyinstaller tarafından toplanamıyor. Eğer böyle bir kütüphane yüzünden exe dosyası çalıştırılma esnasında bir hatayla karşılaşırsanız, hatayı hangi kütüphane veriyorsa, o kütüphanenin Python3.x/Lib/site-packages konumunda yer alan klasörünü, çalıştırılabilir dosyanın bulunduğu dist dizininin içine atabilirsiniz. Böylece kullanıcı python veya modül yüklemek ile uğraşmaz.

1 Beğeni

Yani exe yapmadan dosya olarak atamıyoruz. Teşekkürler arkadaşlar. Ben exe vs yapmadan direkt olarak kütüphaneyi proje içine vermek istiyordum. Kendi yazdığımız kütüphaneleri import eder gibi direkt aynı dosyadan etmeyi düşünüyordum. Belki kütüphanelerin yüklendiği dizinden alabilirim. Yolu nedir acaba?

Benim dediğim gibi pip kullanabilirsiniz, hatta isterseniz modülleri internetten indirmek yerine dosyaları önceden indirip projenin yanına koyar, sonra pip ile o dosyaları kurarsınız.

Pip’i python kodu ile çağırmayı daha önce forumda konuşmuştuk zaten.

Exe yapmayacaksanız, programın çalıştırılması için bilgisayarda python’un olması gerekiyor.

Benim yaklaşımım şöyle; programın bağımlı olduğu kütüphanelerin kullanıcı tarafından yüklemesi için requirements.txt gibi bir dosya oluşturuyorum ve README.md dosyasının içine de programı çalıştırma talimatları yazıyorum.

İsterseniz şöyle bir yöntem de uygulayabilirsiniz; Program ilk kez çalıştırıldığında requirements.txt dosyasındaki modüllerin yüklenmiş olup olmadığı ile alakalı bir sorgu da yapılabilir. Sorguyu tek tek bütün modüller için yapmanızı tavsiye etmiyorum, çünkü böyle bir durumda requirements.txt dosyasının kullanılmasının anlamı kalmıyor. Pekala her bir modül için try: except blokları oluşturabilir, modüllerin yüklü olup olmadığını bu şekilde de sorgulayabilirsiniz.

import os
try:
    import modül
except ModuleNotFoundError:
    os.system("pip3 install modül")

Ancak, dosyanın çok karışık görünmemesi için, genelde bu yaklaşım pek önerilmiyor. Sakıncası var mı? Bence yok. Ama dediğim gibi bir önerilmiyor.

requirements.txt dosyası kullanılacaksa, yine daha farklı sorgular yaparak bu dosyanın içindeki kütüphanelerin bir kez yüklenmesini sağlayabilirsiniz.

Başka bir ihtimal de dediğiniz gibi kütüphane dosyalarını da kullanıcıya sunmanız, zaten @EkremDincel de ondan bahsetmiş.

Tam olarak bundan bahsediyorum Ekrem Bey, bunu nasıl yapabilirim? Yani dosyayı nasıl eklerim projeye?

Dediğiniz gibi o da bir olasılık fakat düşündüğüm program pek bunları yapabilecek insanlara yönelik değil maalesef. Yani pip ile yükleme vs yapabileceklerini sanmıyorum.

Yani tam olarak isteğim şu mesela nickzsche diye bir modül yazdım nasıl bunu import nickzsche diye içeriye akratabiliyorsam aynı dizin üstünden import kivy import colorama gibi diyerek yine dizinden aktarmak istiyorum.

Pip’i kullanma kısmı daha önce konuşulmuştu:

Pypi"den kütüphanenin hedeflediğiniz platforma ait kurulum dosyasını indirmeniz lazım. Belki pip’in kurulum yapmadan sadece dosyaları indirme özelliği de vardır, bilmiyorum.

Eğer projenizin kurulum yapmak için internete ihtiyaç duyması problem değilse dosyaları indirmekle uğraşmayıp yukarıda linkleri direkt uygulayabilirsiniz de.