Python ile farklı bir Python dosyası çekmek

karul

Decapat
Katılım
3 Eylül 2022
Mesajlar
3.004
Çö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.




 
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
 

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ı.
 




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
 






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.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…