如何使用py2exe制作pythonapi?

2024-04-25 10:02:33 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以使用py2exe(或类似工具)“编译”一个Python脚本,然后允许用户访问修改顶层Python脚本?或者可能将编译好的模块导入到它们的普通Python脚本中?我希望能够为一些客户分发一个简单的安装程序,但是允许其他客户通过创建自己的脚本(如API)在安装的版本上进行构建。在

我曾尝试使用py2exe导入我放在“dist”目录中的文件,但它抱怨说它们没有被冻结。为什么它不能混合使用冻结的二进制模块和解释的模块?在

我使用py2exe的原因是我有一些麻烦的库(paramiko/pycrypto,加上一些内部开发的库),我不想让我的客户费力地完成这些安装。我也不想让他们公开访问我的框架文件。我知道他们可以反向编译py2exe对象,但他们必须修改框架,这是足够好的保护。在


Tags: 模块文件工具用户版本目录脚本框架
2条回答

Is it possible to "compile" a Python script with py2exe (or similar) and then allow the user access to modify the top-level Python scripts?

我对py2exe不是特别熟悉,但是看看tutorial page,将hello.py脚本替换为类似以下行的内容似乎相对简单。。。在

import sys
import os

# Import your framework here, and anything else you want py2exe to embed
import my_framework

TOP_LEVEL_SCRIPT_DIR = '/path/to/scripts'
MAIN_SCRIPT = os.path.join(TOP_LEVEL_SCRIPT_DIR, 'main.py')

sys.path.append(TOP_LEVEL_SCRIPT_DIR)
execfile(MAIN_SCRIPT)

…并将您希望用户能够修改的任何脚本放在/path/to/scripts中,尽管将TOP_LEVEL_SCRIPT_DIR定义为相对于二进制文件的路径可能更有意义。在

The reason that I am using py2exe is because I have some troublesome libraries (paramiko/pycrypto, plus some internally developed ones) that I don't want to require my customers to trudge through those installations. I also don't want them to have open access to my framework files.

如果目标是易于安装,那么创建一个常规的InstallShield式安装程序来将所有文件放在正确的位置,如果您不想让“框架文件”读取源代码,那么只需包含.pyc版本。在

我想办法让它工作。我把我的“head”框架文件放在设置.py文件。然后,我有一个编译的运行程序,它使用imp模块动态加载常规的Python脚本,这些脚本调用该head框架文件。这正是我所寻找的那种隐藏的框架,但可访问的API。在

例如,假设我们有一个名为“framework”的目录,主文件“foo”包含所有API调用。py2exe中的线路设置.py文件如下所示:

includes = ['framework.foo', 'some_other_module', 'etc']

然后我为这个跑步者脚本创建一个目标:

^{pr2}$

然后将目标添加到设置.py脚本包括:

console = [FrameworkTarget],

从命令行向编译的运行程序脚本传递“测试套件”脚本的名称:

test_suite_name = sys.argv[1]
file_name = test_suite_name + ".py"
path_name = os.path.join(os.getcwd(), file_name)
print "Loading source %s at %s"%(file_name, path_name)
module = imp.load_source(file_name, path_name )

然后,在冲击加载源()命令,我有这个:

import framework.foo

当我没有的时候框架.foo'在我的includes中,它找不到的编译版本框架.foo. 也许将来有人会发现这个有用。我不知道如果没有Stackoverflow我能做一件有用的事!在

相关问题 更多 >