ModuleNotFoundError: Нет модуля с именем «google» на python 3.6.7 - PullRequest
0 голосов
/ 14 января 2019

Я делаю сценарий, который получает некоторые аргументы и использую эти аргументы для управления базой данных Firebase Realtime.

Когда я запускаю скрипт на cmd (я на компьютере с Windows 10), набрав mpython myScript.py arg1 arg2 ..., он работает нормально. Но когда я использую cx_Freeze для сборки моего .exe, он говорит, что отсутствуют модули

Missing modules:
? Cookie imported from requests.compat
? OpenSSL.SSL imported from urllib3.contrib.pyopenssl
? OpenSSL.crypto imported from urllib3.contrib.pyopenssl
? StringIO imported from requests.compat, six, urllib3.packages.six
....
? urllib3.packages.six.moves.urllib.parse imported from 
urllib3.poolmanager, urllib3.request
? urlparse imported from requests.compat
? vms_lib imported from platform
This is not necessarily a problem - the modules may not be needed on this 
platform.

И это также показывает

Traceback (most recent call last):
  File "C:\Users\engenharia1\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 14, in run
    module.run()
  File "C:\Users\engenharia1\AppData\Local\Programs\Python\Python36\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26, in run
    exec(code, m.__dict__)
  File "Api2.py", line 8, in <module>
  File "C:\Users\engenharia1\AppData\Local\Programs\Python\Python36\lib\site-packages\firebase_admin\__init__.py", line 23, in <module>
    from firebase_admin import credentials
  File "C:\Users\engenharia1\AppData\Local\Programs\Python\Python36\lib\site-packages\firebase_admin\credentials.py", line 20, in <module>
    import google.auth
ModuleNotFoundError: No module named 'google'

Мой setup.py

import sys
from cx_Freeze import setup, Executable

setup ( 
    name = "pyFirebase",
    version = "1.1",
    executables = [Executable("pyFirebase.py")]
)

Мой импорт на pyFirebase.py (не отображается вся программа, потому что она с моей работы, не могу, извините)

import sys
import os

import datetime

import firebase_admin
from firebase_admin import credentials
from firebase_admin import db

from random import randint

И мой способ обращения с аргументами

if(len(sys.argv) == 5):
    var1 = args[1]

Я сделал тест, используя только args и собрав .exe, и он сработал, поэтому, вероятно, проблема в модулях или в моей среде.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

РЕДАКТИРОВАТЬ: попробуйте изменить setup.py следующим образом:

import sys
from cx_Freeze import setup, Executable

include_files = []
packages = ['google']
build_exe_options = {'include_files': include_files,
                     'packages': packages}

setup ( 
    name = "pyFirebase",
    version = "1.1",
    options = {'build_exe': build_exe_options},
    executables = [Executable("pyFirebase.py")]
)

google использует requests, вы найдете дополнительную информацию о том, как использовать requests с cx_Freeze в Библиотека запросов: отсутствует файл сертификатов рукопожатия SSL после cx_Freeze .

Может потребоваться добавить любой необходимый файл (файл лицензии, сертификат, ...?) В список include_files.

Что касается списка Missing modules, о котором сообщает cx_Freeze, это не обязательно является проблемой.

0 голосов
/ 15 января 2019

Я решил это, изменив версию python на 3.7.2 и используя pyinstaller (который я пробовал раньше и тоже не работал) вместо cx_freeze.

Не знаю почему, но сейчас это работает.

...