Py2exe错误:尚不支持命名空间包:跳过包'雪花'

时间:2016-03-24 01:53:29

标签: python py2exe snowflake snowflake-datawarehouse

我一直在尝试使用py2exe为以下脚本生成.exe:

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)

代码很简单,就像一个魅力。

我希望使用py2exe将其转换为.exe但是那时我得到以下错误:

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是一个包,允许我连接到我的数据库(雪花数据库,而不是新的)

我的操作系统是:Windows 10, Python版本3.5.1

我的setup.py for 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']
        }
    }
)
我环顾四周,无法找到这个问题的答案。如果有人有想法。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

snowflake是名称空间包,而不是实际的包。因此,进口商无法到达snowflake.connector。要解决程序包问题,您需要在Snowflake目录中添加__init__.py。尽管有这个修复,但在使用py2exe创建可执行文件时似乎存在其他问题。我建议使用&#39; pyinstaller&#39;这在创建可执行文件时效果很好。

答案 1 :(得分:0)

import snowflake.connector

def createSnowflakeConn():
    print("Creating snowflake connection")
    __conn = snowflake.connector.connect(
    user="your login name",
    password="user password",
    account="account id",
    role="login role",
    warehouse="warehouse to query"
)
return __conn

class WarehouseCursor(object):
    def __init__(self):
        self.__cursor = None
        self.__conn = None
        self.__conn = createSnowflakeConn()

以上代码将帮助您连接Snowflake。使用spark.connector软件包可以解决您的问题