Модуль Python не найден, даже если он существует в пути - PullRequest
0 голосов
/ 12 апреля 2019

Я получаю ошибку «Нет модуля с именем X», даже если X явно присутствует в системном пути.Самый простой способ объяснить это с помощью случая воспроизведения:

  1. Очистить папку и локально установить google-auth-httplib2.
circleci@27190f660cbe:~/project/tempd$ rm -rf *
circleci@27190f660cbe:~/project/tempd$ pip install --target . google-auth-httplib2
Collecting google-auth-httplib2
  Using cached https://files.pythonhosted.org/packages/33/49/c814d6d438b823441552198f096fcd0377fd6c88714dbed34f1d3c8c4389/google_auth_httplib2-0.0.3-py2.py3-none-any.whl
Collecting httplib2>=0.9.1 (from google-auth-httplib2)
Collecting google-auth (from google-auth-httplib2)
  Using cached https://files.pythonhosted.org/packages/c5/9b/ed0516cc1f7609fb0217e3057ff4f0f9f3e3ce79a369c6af4a6c5ca25664/google_auth-1.6.3-py2.py3-none-any.whl
Collecting rsa>=3.1.4 (from google-auth->google-auth-httplib2)
  Using cached https://files.pythonhosted.org/packages/02/e5/38518af393f7c214357079ce67a317307936896e961e35450b70fad2a9cf/rsa-4.0-py2.py3-none-any.whl
Collecting pyasn1-modules>=0.2.1 (from google-auth->google-auth-httplib2)
  Using cached https://files.pythonhosted.org/packages/da/98/8ddd9fa4d84065926832bcf2255a2b69f1d03330aa4d1c49cc7317ac888e/pyasn1_modules-0.2.4-py2.py3-none-any.whl
Collecting cachetools>=2.0.0 (from google-auth->google-auth-httplib2)
  Using cached https://files.pythonhosted.org/packages/39/2b/d87fc2369242bd743883232c463f28205902b8579cb68dcf5b11eee1652f/cachetools-3.1.0-py2.py3-none-any.whl
Collecting six>=1.9.0 (from google-auth->google-auth-httplib2)
  Using cached https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Collecting pyasn1>=0.1.3 (from rsa>=3.1.4->google-auth->google-auth-httplib2)
  Using cached https://files.pythonhosted.org/packages/7b/7c/c9386b82a25115cccf1903441bba3cbadcfae7b678a20167347fa8ded34c/pyasn1-0.4.5-py2.py3-none-any.whl
Installing collected packages: httplib2, pyasn1, rsa, pyasn1-modules, cachetools, six, google-auth, google-auth-httplib2
Successfully installed cachetools-3.1.0 google-auth-1.6.3 google-auth-httplib2-0.0.3 httplib2-0.12.1 pyasn1-0.4.5 pyasn1-modules-0.2.4 rsa-4.0 six-1.12.0
You are using pip version 9.0.1, however version 19.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Убедитесь, что модуль и __init__.py присутствуют.
circleci@27190f660cbe:~/project/tempd$ find google/auth/transport
google/auth/transport
google/auth/transport/grpc.pyc
google/auth/transport/requests.py
google/auth/transport/urllib3.py
google/auth/transport/requests.pyc
google/auth/transport/__init__.py
google/auth/transport/_http_client.pyc
google/auth/transport/urllib3.pyc
google/auth/transport/__init__.pyc
google/auth/transport/grpc.py
google/auth/transport/_http_client.py
Попытка импортировать его в python, но все равно выдается ошибка.
circleci@27190f660cbe:~/project/tempd$ python
Python 2.7.13 (default, Sep 14 2017, 23:43:58)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.insert(0, ".")
>>> import google.auth.transport.requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named google.auth.transport.requests
>>> exit()

Я вижу это в python 2.7.13.Что здесь происходит, и каково решение?

Примечание. Мне необходимо поддерживать 2.7.13.

Примечание 2. К сожалению, я вынужден импортировать таким образом -virtualenv и т. д. не являются опциями.

Для контекста это проблема поставщика.Я занимаюсь разработкой приложения на python, которое «устанавливает» непрограммист в своей системе, распаковывая zip-файл и запуская оттуда python.Таким образом, такие решения, как virtualenv (или что-то еще, что напрямую не решает эту проблему в коде) не будут работать.

1 Ответ

0 голосов
/ 12 апреля 2019

Проблема с вашей установкой в ​​том, что в каталоге google/ отсутствует файл __init__.py, поэтому import google не работает.Создайте google/__init__.py, перезапустите python и попробуйте снова:

$ touch google/__init__.py
$ python2.7
Python 2.7.13 (default, Sep 26 2018, 18:42:22) 
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.insert(0, ".")
>>> import google.auth.transport.requests
...