2016-03-24 11 views
1

ich versucht habe, eine EXE für das folgende Skript mit py2exe zu generieren:Py2exe Fehler: Namespace-Pakete noch nicht unterstützt: Skipping-Paket ‚Schneeflocke‘

import snowflake.connector 
import os 
import sys 


# Setting your account information 
ACCOUNT = '########' 
USER = '#######' 
PASSWORD = '#######' 

ROLES=[] 
DATABASE=[] 

ROLES.append(sys.argv[1]) 
DATABASE.append(sys.argv[2]) 

print(ROLES) 
print(DATABASE) 

cnx = snowflake.connector.connect(
    user=USER, 
    password=PASSWORD, 
    account=ACCOUNT, 

) 


cur = cnx.cursor() 
list_of_grants=[] 

for rl in ROLES: 
    print("Role: "+rl) 
    db_res=cur.execute("SHOW DATABASES").fetchall() 
    for db in DATABASE: 
     print("Database: "+ db) 
     use_db_query = "USE DATABASE " + db 
     print(use_db_query) 
     cur.execute(use_db_query) 
     schema_res= cur.execute("SHOW SCHEMAS").fetchall() 
     for sch in schema_res: 
      print("schema: "+ sch[1]) 
      list_of_grants.append("GRANT ALL ON SCHEMA "+db+"."+sch[1]+" to role "+rl+" with grant option") 
      use_db_query = "USE SCHEMA " + sch[1] 
      cur.execute(use_db_query) 
      tables_res=cur.execute("SHOW TABLES IN "+sch[1]).fetchall() 
      for tbl in tables_res: 
       print("table: "+ tbl[1]) 
       list_of_grants.append("GRANT ALL ON TABLE "+db+"."+sch[1]+"."+tbl[1]+" to role "+rl+" with grant option") 
for grant in list_of_grants: 
    cur.execute(grant) 

Der Code ist ziemlich einfach und funktioniert wie ein Charme .

Ich wünschte, es in eine .exe drehen mit py2exe verwenden, aber in diesem Moment bekam ich folgende Fehlermeldung:

running py2exe 
Error: Namespace packages not yet supported: Skipping package 'snowflake' 
Traceback (most recent call last): 
    File "setup.py", line 13, in <module> 
    'packages': ['snowflake'] 
    File "C:\Anaconda3\lib\distutils\core.py", line 148, in setup 
    dist.run_commands() 
    File "C:\Anaconda3\lib\distutils\dist.py", line 955, in run_commands 
    self.run_command(cmd) 
    File "C:\Anaconda3\lib\distutils\dist.py", line 974, in run_command 
    cmd_obj.run() 
    File "C:\Anaconda3\lib\site-packages\py2exe\distutils_buildexe.py", line 188, in run 
    self._run() 
    File "C:\Anaconda3\lib\site-packages\py2exe\distutils_buildexe.py", line 267, in _run 
    builder.analyze() 
    File "C:\Anaconda3\lib\site-packages\py2exe\runtime.py", line 168, in analyze 
    mf.import_package(modname) 
    File "C:\Anaconda3\lib\site-packages\py2exe\mf3.py", line 92, in import_package 
    self.import_hook(name) 
    File "C:\Anaconda3\lib\site-packages\py2exe\mf3.py", line 120, in import_hook 
    module = self._gcd_import(name) 
    File "C:\Anaconda3\lib\site-packages\py2exe\mf3.py", line 274, in _gcd_import 
    return self._find_and_load(name) 
    File "C:\Anaconda3\lib\site-packages\py2exe\mf3.py", line 337, in _find_and_load 
    raise ImportError(name) 
ImportError: snowflake 

Snowflake ist ein Paket, das mir erlauben, meine DB (eine Schneeflocke-Datenbank zu verbinden, ziemlich neu)

Mein o ist: Windows 10, Python Version 3.5.1

Mein setup.py für py2exe:

from distutils.core import setup 

import snowflake.connector 
import py2exe, sys, os 


sys.argv.append('py2exe') 

setup(
    console=['grants.py'], 
    options = { 
     'py2exe': { 
      'packages': ['snowflake'] 
     } 
    } 
) 

Ich schaute mich um und konnte keine Antwort auf dieses Problem finden. Wenn jemand eine Idee hat.

Vielen Dank im Voraus für Ihre Hilfe.

Antwort

1

snowflake ist ein Namespace-Paket und kein tatsächliches Paket. Daher erreicht der Importeur nicht snowflake.connector. Um das Paketproblem zu lösen, müssen Sie __init__.py im Snowflake-Verzeichnis hinzufügen. Trotz dieses Fixes scheint es andere Probleme beim Erstellen einer ausführbaren Datei mit py2exe zu geben. Ich schlage vor, 'pyinstaller' zu verwenden, das beim Erstellen einer ausführbaren Datei gut funktioniert.

+0

Hallo @Oliver, Danke für deine Antwort, ich habe versucht pyinstaller und ich habe ein paar Probleme damit. Ich werde mehr darüber schauen und sehen, was das Problem ist, wenn das funktioniert Ich werde dieses Thema als geschlossen markieren. – leCLEMS