python, вызванный из makefile, не может найти urllib.request

#python #makefile #conda #urllib

#python #makefile #conda #urllib

Вопрос:

Сначала это казалось типичной ошибкой python2-> 3, но я не смог понять, что здесь может быть не так. Возможно, это связано с конфликтом между conda и makefile .

По-моему makefile , у меня есть правило:

 update_stuff:
    python --version
    which python
    python stuff.py
  

который выводит

 python --version
Python 3.8.3
which python
/Users/username/anaconda3/bin/python
...
  

затем в моем скрипте на python у меня есть эти соответствующие строки:

 import urllib
import sys
print(sys.version)
print(sys.executable)
req = urllib.request.Request(URL)
  

какой вывод выводится первым

 3.8.3 (default, Jul  2 2020, 11:26:31) 
[Clang 10.0.0 ]
/Users/user/anaconda3/bin/python
  

но затем выдает ошибку

   File "stuff.py", line 278, in <module>
    req = urllib.request.Request(URL)
AttributeError: module 'urllib' has no attribute 'request'
make: *** [update_stuff] Error 1
  

Если я просто запускаю файл из командной строки с python stuff.py помощью, он работает нормально, и я не вижу, где может быть вызвана версия python, которая не знает urllib . Запуск make SHELL=/bin/bash ничего не меняет. Есть какие-либо указания на то, как это исправить?

Комментарии:

1. Кроме того, используете ли вы для этого базовую / корневую среду Conda?

2. да, это так. Я думаю, что это работало раньше, так что, возможно, это было вызвано каким-то обновлением от 3.? до 3.8, когда я переустановил anaconda

3. да, это так. Будьте осторожны, это может легко привести к некоторым проблемам. Лучше всего создать новую среду для каждого проекта.

Ответ №1:

Вам нужно указать импорт:

 import urllib.request
  

https://docs.python.org/3.8/library/urllib.request.html#module-urllib.request