python调用pyd失效

  1. 给别人python项目提供某个实现,不像让人看到源码(敏感配置等),可以将自己的python文件打包成pyd,提供给三方使用,例如我的一个想做成pyd文件的demo如下
# python连接demo
import json
import pypyodbc

# sybase连接串
conn_str = 'DSN=***;UID=**;charset=cp850'
conn = pypyodbc.connect(conn_str)
cur = conn.cursor()


def insert(param):
    cur.execute("insert into ** values" + param)
    cur.commit()

def select():
    res = cur.execute("select * from **")
    rows = res.fetchall()
    for row in rows:
        print(row)
    return rows.__str__()

if __name__ == '__main__':
    s = ('990', 'pyd传参用例', '', '1')
    # insert(s.__str__())
    select()
    cur.close()

  1. 使用的时候可能会发现根本调用不了的问题。在下面的代码段,external为pyd文件所在主项目的文件夹,sysbaseOpr是文件名,而select()是我们隐藏起来的数据库操作函数
res = importlib.import_module('.sybaseOpr', 'external').select()
  1. 这样的情况,在预加密的py文件会引入一些包,这些包需要在主项目打包构建文件*.spec手动编辑,例如,在我的pyd引入了pypyodbc,那么同时需要在引入pyd文件的项目隐式引入pypyodbc,再如图
    在这里插入图片描述
    在这里插入图片描述
  2. 这样就可以调用pyd正常工作了

版权声明:本文为tianjingsha_persume原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。