Как сделать модуль доступным для других модулей - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть два файла 'mod1.py' и 'mod2.py' .

mod1 требует, чтобы модуль запроса работал.Но я не импортировал их в mod1, вместо этого я импортировал модуль request и mod1 в mod2 .

Но

Я получаю сообщение об ошибке "имя" запросов "не определено" .Я знаю, что это работает, если я импортирую 'request' модуль в mod1 напрямую, он работает нормально.Но у меня есть другие модули, которые я хочу использовать, для которых требуется модуль 'request' . Так как мне импортировать модуль один раз и сделать доступным для всех остальных модулей?.

mod1.py

class getUrl():
    def __init__(self, url):
        self.url = url

    def grab_html(self):
        html = requests.get(self.url).text
        return html

mod2.py

import requests
import mod1

module1 = mod1.getUrl('https://www.wikipedia.org/')
HTML = module1.grab_html()

Редактировать: полная ошибка

Traceback (most recent call last):
  File "C:\Users\camel\Desktop\test\mod2.py", line 5, in <module>
    HTML = module1.grab_html()
  File "C:\Users\camel\Desktop\test\mod1.py", line 6, in grab_html
    html = requests.get(self.url).text
NameError: name 'requests' is not defined
[Finished in 0.5s with exit code 1]
[shell_cmd: python -u "C:\Users\guru\Desktop\test\mod2.py"]

Ответы [ 4 ]

0 голосов
/ 07 февраля 2019

Когда вы импортируете что-то, оно становится именованным в модуле, который его импортировал.Запросы не используются по прямому назначению mod2.py, но по mod1.py, поэтому вы должны импортировать их.

Вы можете сделать это, например.

mod1.py

import requests

class getUrl():
def __init__(self, url):
    self.url = url

def grab_html(self):
    html = requests.get(self.url).text
    return html

mod2.py

import mod1

module1 = mod1.getUrl('https://www.wikipedia.org/')
HTML = module1.grab_html()

# And also access requests via mod1
indirectly = mod1.requests.get('https://www.wikipedia.org/').text
0 голосов
/ 07 февраля 2019

Вам необходимо создать файл __init__.py (он может быть пустым), чтобы папка, содержащая mod1, распознавалась как модуль.

Затем вы можете сделать from mod1 import * или from path.to.mod1 import *, и он перенесет весь импорт на mod2.Проверьте этот относительный ответ.На мой взгляд, это разумный способ ведения дел, так как вы можете хранить все свои зависимости в централизованном месте.

Поскольку вы обеспокоены использованием памяти, взгляните на еще один разговор по тому же вопросу.

0 голосов
/ 07 февраля 2019

Поскольку вы не используете запросы в mod2.py, вы можете просто выполнить запросы на импорт в mod1.py

Если вы беспокоитесь о памяти, она займет столько же, сколько вы собираетесь использоватьэто только в одном сценарии.Но если вы используете, если вы планируете использовать его и в mod2.py, то вы должны также включить его.

0 голосов
/ 07 февраля 2019

запросов на импорт должны быть в mod1.py, потому что они используются в методах класса, определенного в mod1.py.Вы можете импортировать его в обоих местах, если это было необходимо и в mod2.py.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...