Python ile farklı bir Python dosyası çekmek

karul

Decapat
Katılım
3 Eylül 2022
Mesajlar
2.989
Çözümler
19
Merhaba, aynı klasördeki 2 farklı py dosyası var. finder.py ve controllers.py. Finder.py üzerinden from controllers import Controller ile controllers.py içindeki bir modülü çekmeye çalışıyorum. Olmuyor.
Nasıl çekmem gerekiyor? "core.controllers" denedim. "controllers" denedim. ".controllers" denedim. Hiçbiri olmuyor.

1673771949870.png


1673771983441.png

1673772101845.png
 
Yapmak istediğiniz şey controllers.py dosyasını finder.py dosyasının içine import etmek mi?
Eğer öyleyse şu şekilde yaptığınızda olması gerekir:

Python:
import controllers

Eğer olmuyorsa modüller için ayrı bir klasör açıp deneyebilirsiniz.
Örneğin finder.py dosyasının bulunduğu dizine src adında bir klasör oluşturup çekmek istediğiniz modül dosyalarını oraya atın. Ardından:

Python:
from src import controllers

Şeklinde içeri aktarmayı yapabilirsiniz.
 
Python:
#Eğer aynı klasördeki controllers.py dosyasını olduğu gibi import edecekseniz
import controllers
#Eğer aynı klasördeki controllers.py dosyasındaki bir fonksiyonu import edecekseniz
from controllers import fonksiyonadi

Bu şekilde de aktarabilirsiniz diye biliyorum :)
 
Python:
#Eğer aynı klasördeki controllers.py dosyasını olduğu gibi import edecekseniz.
import controllers.
#Eğer aynı klasördeki controllers.py dosyasındaki bir fonksiyonu import edecekseniz.
from controllers import fonksiyonadi.

Bu şekilde de aktarabilirsiniz.

Alttakini zaten denedim. Olmadı. Dümdüz import yapmak işe yarar mı bilmiyorum. Controllers'ın içinden bir fonksiyon çekmek istiyorum. Ve çalışmadı.
 
2023-01-15-122105_1920x1080_scrot.png


2023-01-15-122136_1920x1080_scrot.png


Mevcut dizinden de çekiliyor.

controllers.py ve finder.py dosyalarının içeriğini kod bloğu içerisinde buraya atabilir misiniz?
 
controllers.py
Python:
from .workers import worker_func
from .threads import log_notifier, stat_updater
from .utils import slice_list, slice_range, parse_proxy_string
from multiprocessing import Process, Queue
from threading import Thread

class Controller:
    def __init__(self, arguments):
        self.arguments = arguments
        self.workers = []
        self.proxies = []
        self.count_queue = Queue()
        self.log_queue = Queue()
       
        if self.arguments.proxy_file:
            self.load_proxies()

        self.start_stat_updater()
        self.start_log_notifier()
        self.start_workers()

    def load_proxies(self):
        proxies = set()
        with self.arguments.proxy_file as fp:
            line_num = 0
            while (line := fp.readline()):
                try:
                    proxy = parse_proxy_string(line.rstrip())
                    if not proxy in proxies:
                        proxies.add(proxy)
                except Exception as err:
                    print(f"Error while parsing line {line_num+1} in proxy file: {err!r}")
                finally:
                    line_num += 1
        assert proxies, "Proxy file is empty."
        self.proxies.extend(proxies)

    def start_log_notifier(self):
        thread = Thread(
            target=log_notifier,
            name="LogNotifier",
            daemon=True,
            args=(self.log_queue, self.arguments.webhook_url))
        thread.start()

    def start_stat_updater(self):          
        thread = Thread(
            target=stat_updater,
            name="StatUpdater",
            daemon=True,
            args=(self.count_queue,))
        thread.start()

    def start_workers(self):
        for worker_num in range(self.arguments.workers):
            worker = Process(
                target=worker_func,
                name=f"Worker-{worker_num}",
                daemon=True,
                kwargs=dict(
                    thread_count=self.arguments.threads,
                    log_queue=self.log_queue,
                    count_queue=self.count_queue,
                    proxy_list=slice_list(self.proxies, worker_num, self.arguments.workers),
                    timeout=self.arguments.timeout,
                    gid_ranges=[
                        slice_range(gid_range, worker_num, self.arguments.workers)
                        for gid_range in self.arguments.range
                    ],
                    gid_cutoff=self.arguments.cut_off,
                    gid_chunk_size=self.arguments.chunk_size
                )
            )
            self.workers.append(worker)
       
        for worker in self.workers:
            worker.start()

    def join_workers(self):
        for worker in self.workers:
            worker.join()

finder.py
Python:
from .controllers import Controller
from .arguments import parse_args
import multiprocessing

if __name__ == "__main__":
    multiprocessing.freeze_support()
    controller = Controller(arguments = parse_args())
    try:
        controller.join_workers()
    except KeyboardInterrupt:
        pass
 
2023-01-15-122800_1920x1080_scrot.png


2023-01-15-122811_1920x1080_scrot.png


2023-01-15-122821_1920x1080_scrot.png


Bazı modüller bende eksik olduğundan birkaç hata mesajı var ama controllers.py dosyası içerisinden Controller class'ı çekiliyor.

Attığınız ilk mesaja baktığımda şu kullanımda size hata döndürmüş:

Python:
from .controllers import Controller

Şu şekilde kullandığınızda işe yaraması gerek:

Python:
from controllers import Contoller
 
Eki Görüntüle 1633501

Eki Görüntüle 1633502

Eki Görüntüle 1633503

Bazı modüller bende eksik olduğundan birkaç hata mesajı var ama controllers.py dosyası içerisinden Controller Class'ı çekiliyor.

Attığınız ilk mesaja baktığımda şu kullanımda size hata döndürmüş:

Python:
from .controllers import Controller

Şu şekilde kullandığınızda işe yaraması gerek:

Python:
from controllers import Contoller

Zaten denedim. Olmuyor.
 

Yeni konular

Geri
Yukarı