Модуль 'urllib' не имеет атрибута 'request' error при запуске из пакетного файла, но отлично работает из IDE - PullRequest
0 голосов
/ 31 октября 2019

Я получаю исключение «модуль« urllib »не имеет атрибута« запрос »», когда я запускаю свою программу через файл bat, но он прекрасно работает, когда я запускаю его в IDE Spyder. Я использую Python v3.7. В чем может быть разница? Я хочу запустить его через командный файл.

Пакетный файл:

@echo off
@python c:\users\gadkins\documents\pythonscripts\dl_unzip.py %*
@pause

Фрагмент файла py:

import urllib
import smtplib
import ssl

url_src = 'https://site.edu//uploads/tmp/_Files0805-21Oct2019.zip'
url_dst = 'D:\download\af.zip'
uzip_src = url_dst
uzip_dst = r'D:\data\af'
data_type = 'af'

try:
    urllib.request.urlretrieve(url_src, url_dst)
except Exception as e: 
    error = str(e)
    print(error)
    print(study + ': ' + data_type + ' download failed!')
    print('Exception = ' + error)

    #if email == '-e':
    msg('dl_fail', study, data_type, '', error)

    context = ssl.create_default_context()
    with smtplib.SMTP_SSL(smtp_server, port, context=context) as server:
        server.login(sender_email, password)
        server.sendmail(sender_email, receiver_email, message)

1 Ответ

0 голосов
/ 12 ноября 2019

Я нашел разрешение. Я обновил свой код до import urllib.request, который, кажется, импортирует не только пакет, но и субмодуль request. Тем не менее, мне все еще неясно, почему это необходимо при выполнении через командную строку, но не с помощью Spyder и Jupyter.

Этот пост, как представляется, лучше всего суммирует ответ:

импорт urllib.parse завершается неудачно, когда Python запускается из командной строки

...