Otomatik Paket indirici

şuan aklıma gelmiyor ama bir insanın pip yerine seninikimi kullanmasını sağlıyacak bir albenisi olması lazım mesela modülün açıklamasını versin

1 Beğeni

İndirdiği modülün ne işe yaradığı gibi bilgilermi biraz açıklarmısın

Info tuşu hazırlayabilirsiniz

1 Beğeni

Benim dediğim gibi işte, PyPi’den bilgi çekicek modülle alakalı.

1 Beğeni

Peki bilgiyi PyPi ’ den requests ve BeautifulSoup ile çektim ama bunu kullanıcıya nasıl göstereyim.Yani açılan bir text dosyası ile ya da tkinter messagbox şeklinde gibi birşey ilemi göstereyim ?

İstediğiniz gibi gösterin. Bunun için yeni bir pencere açmak gereksiz bence, zaten bütün yazıyı değil kısa bir bölümünü gösterirsiniz.

Peki requests ve BeautifulSoup kullanayımmı yoksa başka modüller kullanılabilirmi ?
requests ve Beautiful soup ile yapacaksam bir örnek paylaşırmısınız yol gösterme açısından

Veriyi aldım ve şimdi Text widgetin içine yazmak istiyorum fakat sadece son cümleyi yazıyor
kod:

widget.insert("1.0","Done\n{}\n".format(url))

yeni = tk.Tk()
yeni.title("İnfo")
yeni.geometry("300x300")
yeni.resizable(False,False)

hello = tk.Text(yeni,height=30,width=30,fg="RED",bg="BLACK")
hello.place(x=0,y=0)
hello.config(state="normal")
hello.insert("1.0",strings)

stings yazı bölümü

import tkinter as tk,tkinter.messagebox
import os,sys
import requests
from bs4 import BeautifulSoup
import smtplib


def Email():
    root = tk.Tk()
    root.geometry("300x300")
    root.title("E-Mail")
    root.resizable(False,False)
    root.configure(background="GREY")


    root.mainloop()

def remove():
    data1 = değer1.get()
    try:
        __import__(data1)
    except ModuleNotFoundError:
        widget.insert("1.0","Bu modül\nyüklü bile değil\n")
    except ValueError:
        widget.insert("1.0","Havayı silemem\n")
    else:
        widget.insert("1.0","Silinen Paketler\ngeri gelmez\nTekrar yüklemeniz gerekir\n")
        tkinter.messagebox.showwarning("Paket Sil","{} Paketini silmek istiyormusun ?".format(data1))



def info():
    data1 = değer1.get()
    url = ("https://pypi.org/project/{}/").format(data1)
    try:
        r = requests.get(url)
        soup = BeautifulSoup(r.text,'html.parser')
        for tag in soup.find_all('p'):
            strings = "".join(line.strip() for line in str(tag.string).split("\n"))
            if strings != "None":
                print(strings)

    except requests.exceptions.ConnectionError:
        widget.insert("1.0","Bağlantı yok\n")

    else:
        if data1 == "":
            widget.insert("1.0","Kütüphane adı boş kalamaz\n")
        else:
            widget.insert("1.0","Done\n{}\n".format(url))
            dosya = open("{}.txt".format(data1),"a")
            dosya.write(strings)
            widget.insert("1.0","Modül hakkında Bilgiye\n{}.txt dosyasından\nulaşabilirsiniz\n".format(data1))



def upgrade():
    os.system("pip3 install --upgrade pip")
    widget.insert("1.0","Pip güngellendi\n")
        

def indir():
    rand = ["2","3"]
    data1 = değer1.get()
    data2 = değer2.get()

    if data2 == "":
        widget.insert("1.0","Sürüm boş kalamaz\n")
    elif data1 == "":
        widget.insert("1.0","Kütüphane adı boş kalamaz\n")
    elif data2 not in rand:
        widget.insert("1.0","Lütfen Default Kısma\n(3 veya 2) girin\n")
    else:
        try:
            __import__(data1)
        except ModuleNotFoundError:
            os.system("pip{} install {}".format(data2,data1))
            try:
                __import__(data1)
            except ModuleNotFoundError:
                widget.insert("1.0","Adı {} olan bir modül\nyok !\n".format(data1))
            except ConnectionError:
            	widget.insert("1.0","Bağlantı yok")
            else:
            	widget.insert("1.0","Modül Başarıyla İndirildi\nBilgi al butonuna tıklayarak\nbilgi alabilirsiniz")
        else:  
            widget.insert("1.0","Bu modül zaten yüklü\n")
       

pencere = tk.Tk()
pencere.geometry("380x320")
pencere.title("Paket Yükleyici v0.1")
pencere.resizable(False,False)
pencere.configure(background="GREY")

değer1 = tk.Entry(font="Verdana 13",fg="AQUA",bg="GREY")
değer1.place(x=20,y=20)

değer2 = tk.Entry(font="Verdana 13",fg="BROWN",bg="GREY")
değer2.place(x=20,y=60)
değer2.insert(0,"3")

buton1 = tk.Button(text="İndir",fg="GREEN",bg="BLACK",font="Verdana 15",command=indir)
buton1.place(x=20,y=110)

buton2 = tk.Button(text="İptal Et",fg="RED",bg="BLACK",font="Verdana 15",command=sys.exit)
buton2.place(x=20,y=160)

buton3 = tk.Button(text="Pip Güncelle",fg="BLUE",bg="BLACK",font="Verdana 14",command=upgrade)
buton3.place(x=20,y=210)

buton4 = tk.Button(text="Paket Kaldır",font="Verdana 14",fg="AQUA",bg="BROWN",command=remove)
buton4.place(x=20,y=260)

lamel1 = tk.Label(text="Kütüphane Adı",fg="RED",bg="GREY")
lamel1.place(x=250,y=25)

lamel2 = tk.Label(text="Python sürümü",fg="GREEN",bg="GREY")
lamel2.place(x=250,y=65)

widget = tk.Text(height=10,width=30,fg="RED",bg="BLACK")
widget.place(x=165,y=165)
widget.config(state="normal")

wormer = tk.Menu(pencere)

wormer.add_command(label="E-Mail Gönder",font="Times 12",foreground="BLACK",command=Email)
wormer.add_command(label="Bilgi al",font="Times 12",foreground="Black",command=info)

pencere.config(menu=wormer)

pencere.mainloop()

toolbar ve massagebox ekledim ama modül bilgisini txt dosyasına yazdıramıyorum

1 Beğeni

Birincisi, else, try except deyimine ait bir ifade değil.

info fonksiyonunu da şu şekilde değiştirin:

def info():
    data1 = değer1.get()
    url = ("https://pypi.org/project/{}/").format(data1)
    try:
        r = requests.get(url)
        soup = BeautifulSoup(r.text,'html.parser')
        strings = ""
        for tag in soup.find_all('p'):
            s = "".join(line.strip() for line in str(tag.string).split("\n"))
            if s != "None":
                strings += s + "\n"
    except requests.exceptions.ConnectionError:
        widget.insert("1.0","Bağlantı yok\n")
    if data1 == "":
        widget.insert("1.0","Kütüphane adı boş kalamaz\n")
    else:
        widget.insert("1.0","Done\n{}\n".format(url))
        dosya = open("{}.txt".format(data1),"a")
        dosya.write(strings)
        widget.insert("1.0","Modül hakkında Bilgiye\n{}.txt dosyasından\nulaşabilirsiniz\n".format(data1))
1 Beğeni

Orada da var, hata verilmezse çalışıyor.

2 Beğeni

Karşılaştığım kodlarda hiç denk gelmedim. Kendim de hiç bu şekilde kullanmadım. Ama kullanımı varmış.

try,except,else ve finally hepsi try içinde değilmi ?

Hepsi try içinde derken?

1 Beğeni

try ile uyumlu çalışır demek istedim

else ifadesi try except ifadeleriyle kullanılıyormuş, bilmiyordum.

peki finally ?
o ne oluyor

istisna oluşsa da oluşmasa da sonunda yapılması gereken işlemleri yazdığınız bir ifade o.

1 Beğeni

@EkremDincel pip ile indirilen bütün modüllerin listesi PyPi ’ de varmıdır

Bir modülün pip ile indirilebilmesi için PyPi’de olması lazım zaten.