Проблемы с питоном при импорте локального пакета в локальный пакет - PullRequest
0 голосов
/ 07 ноября 2018

это мой первый пост здесь, и я также довольно плохо знаком с python, за последние два дня я боролся с ошибкой:

Traceback (most recent call last):
File "Main.py", line 6, in <module>
    import PyScrape
File "/Users/arya/Desktop/Coding/Python/x/x/PyScrape/__init__.py", line 1, in <module>
    from . import ProxyScraper
File "/Users/arya/Desktop/Coding/Python/x/x/PyScrape/ProxyScraper/__init__.py", line 6, in <module>
    from . import FreeProxyList
ModuleNotFoundError: No module named 'ProxyScraper'

при попытке импортировать каталог «ProxyScraper» в файл __init__.py в каталоге «PyScrape», моя файловая структура ниже, дайте мне знать, если мне нужно раскрыть больше информации.

PyScrape/
    __init__.py
    ProxyChecker.py
    ProxyScraper/
        __init__.py
        CheckerProxy.py
        FreeProxyList.py
        Hidester.py
        HttpTunnel.py
        PremProxy.py
        SpysMe.py
        Utility.py

Содержимое __init__.py в каталоге "PyScrape" следующее:

from . import ProxyScraper
from . import ProxyChecker

def Scrape():
     return ProxyChecker.CheckProxyList(ProxyScraper.Scrape())

Содержимое __init__.py в каталоге «ProxyScraper» выглядит следующим образом: из ниток импорт ниток из очереди импорта очередь

from . import FreeProxyList
from . import Hidester
from . import CheckerProxy
from . import SpysMe
from . import HttpTunnel

SourceArray = ["FreeProxyList", "Hidester", "CheckerProxy", "SpysMe", "HttpTunnel"]

def Scrape():
    WorkerList = []
    ProxyQueue = Queue()

    for Source in SourceArray:
        Worker = Thread(name=Source, target=eval(Source + ".Scrape"), args=(ProxyQueue,))
        WorkerList.append(Worker)
        Worker.start()

    for Worker in WorkerList:
        Worker.join()

    return ProxyQueue

1 Ответ

0 голосов
/ 09 ноября 2018

Для импорта модуля python его каталог должен быть задан либо в переменной PYTHONPATH, например, в файле $HOME/.bashrc, либо явно вставлен в sys.path во время выполнения.

Одним из решений будет:

>>> import sys
>>> sys.path.insert(0, '/path/to/PyScrape')

Другой будет:

$ echo 'export PYTHONPATH=$PYTHONPATH:/path/to/PyScrape' >> $HOME/.bashrc
$ source $HOME/.bashrc

Имейте в виду, что вместо .bashrc соответствующий файл может быть .profile.

Когда вы установите PYTHONPATH, тогда результат команды:

>>> import sys
>>> sys.path

будет содержать путь, который вы указали в $PYTHONPATH, потому что:

sys.path - список строк, в котором указывается путь поиска модулей. Инициализируется из переменной среды PYTHONPATH, а также зависит от установки по умолчанию.

...