Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用py2exe制作pythonapi?_Python_Py2exe - Fatal编程技术网

如何使用py2exe制作pythonapi?

如何使用py2exe制作pythonapi?,python,py2exe,Python,Py2exe,是否可以使用py2exe(或类似工具)“编译”Python脚本,然后允许用户修改顶级Python脚本?或者可能将编译后的模块导入到它们的普通Python脚本中?我希望能够为一些客户分发一个简单的安装程序,但允许其他客户通过创建自己的脚本(与已安装的框架模块(如API)一起使用)来构建已安装的版本 我曾尝试使用py2exe导入我放在“dist”目录中的文件,但它抱怨这些文件没有被冻结。为什么它不能混合使用冻结的二进制模块和解释的模块 我之所以使用py2exe,是因为我有一些麻烦的库(paramik

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

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

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

是否可以使用py2exe(或类似工具)“编译”Python脚本 然后允许用户访问修改顶级Python脚本

我对
py2exe
不是特别熟悉,但是看看这个脚本,用类似于以下内容的东西替换
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
中,尽管将
顶层脚本目录定义为相对于二进制文件的路径可能更有意义

我使用py2exe的原因是因为我遇到了一些麻烦 库(paramiko/pycrypto,以及一些内部开发的库) 我不想要求我的客户在这些问题上跋涉 安装。我也不想让他们公开访问我的 框架文件

如果目标是易于安装,那么创建一个普通的InstallShield式安装程序就足够了,将所有文件放在正确的位置,如果您不想让“框架文件”的
.pyc
版本读取源代码,只需将其包括在内

是否可以使用py2exe(或类似工具)“编译”Python脚本 然后允许用户访问修改顶级Python脚本

我对
py2exe
不是特别熟悉,但是看看这个脚本,用类似于以下内容的东西替换
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
中,尽管将
顶层脚本目录定义为相对于二进制文件的路径可能更有意义

我使用py2exe的原因是因为我遇到了一些麻烦 库(paramiko/pycrypto,以及一些内部开发的库) 我不想要求我的客户在这些问题上跋涉 安装。我也不想让他们公开访问我的 框架文件


如果目标是易于安装,那么创建一个普通的InstallShield式安装程序就足够了,它可以将所有文件放在正确的位置,如果您不想让“框架文件”的
.pyc
版本读取源代码,那么只需包含这些文件即可。我将“head”框架文件放在setup.py文件的“includes”列表中。然后,我有一个compliled runner,它使用imp模块动态加载常规Python脚本,这些脚本调用该head框架文件。这正是我所寻找的那种隐藏的框架,但又是可访问的API

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

includes = ['framework.foo', 'some_other_module', 'etc']
然后,我为这个runner脚本创建一个目标:

FrameworkTarget = Target(
    # what to build
    script = "run_framework.py",
    dest_base = "run_framework"   
    )
然后将目标添加到setup.py脚本中的setup()命令,以及其他内容:

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 )
然后,在imp.load_source()命令调用的文件中,我有以下内容:

import framework.foo

当我的includes中没有“framework.foo”时,它找不到framework.foo的编译版本。也许将来有人会发现这很有用。我不知道如果没有Stackoverflow我是否能做一件有用的事情

我找到了让它工作的方法。我将“head”框架文件放在setup.py文件的“includes”列表中。然后,我有一个compliled runner,它使用imp模块动态加载常规Python脚本,这些脚本调用该head框架文件。这正是我所寻找的那种隐藏的框架,但又是可访问的API

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

includes = ['framework.foo', 'some_other_module', 'etc']
然后,我为这个runner脚本创建一个目标:

FrameworkTarget = Target(
    # what to build
    script = "run_framework.py",
    dest_base = "run_framework"   
    )
然后将目标添加到setup.py脚本中的setup()命令,以及其他内容:

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 )
然后,在imp.load_source()命令调用的文件中,我有以下内容:

import framework.foo
当我的includes中没有“framework.foo”时,它找不到framework.foo的编译版本。也许将来有人会发现这很有用。我不知道如果没有Stackoverflow我是否能做一件有用的事情