当前位置: 首页 > 面试题库 >

如何从多个脚本构建单个python文件?

澹台奇略
2023-03-14
问题内容

我有一个简单的python脚本,它导入了我编写的其他各种模块(依此类推)。由于我的环境,我的PYTHONPATH很长。我也在使用Python 2.4。

我需要做的是以某种方式打包我的脚本和所有不属于标准python的依赖项,以便可以将单个文件通过电子邮件发送到要执行该文件的另一个系统。我知道python的目标版本是相同的,但是在Windows上的linux上。否则,我只会使用py2exe。

理想情况下,我想发送一个.py文件,该文件以某种方式嵌入了所有必需的模块,但是我决定自动构建一个zip文件,只需将其解压缩即可,所有必需的模块都位于一个目录中。

我看过各种包装解决方案,但似乎找不到合适的方法。我错过了什么吗?

[编辑]我对所追求的东西似乎还不清楚。我基本上是在寻找py2exe之类的东西,它将根据给定的python脚本自动生成一个文件(或2个文件),并自动包括所有导入的模块。

例如,如果我有以下两个文件:

[\foo\module.py]
def example():
    print "Hello"

[\bar\program.py]
import module
module.example()

然后我运行:

cd \bar
set PYTHONPATH=\foo
program.py

然后它将起作用。我要说的是:

magic program.py

最后得到一个文件,或者可能是一个文件和一个zip文件,然后我可以将其复制到linux并运行。我不想在目标linux系统上安装我的模块。


问题答案:

我想出了一个包含模块查找器,编译器和运行良好的zip函数的解决方案。不幸的是,由于它与其他不相关的代码混合在一起,因此我无法在此处粘贴工作程序,但以下是一些摘要:

zipfile = ZipFile(os.path.join(dest_dir, zip_name), 'w', ZIP_DEFLATED)
sys.path.insert(0, '.')
finder = ModuleFinder()
finder.run_script(source_name)

for name, mod in finder.modules.iteritems():
    filename = mod.__file__
    if filename is None:
        continue
    if "python" in filename.lower():
        continue

    subprocess.call('"%s" -OO -m py_compile "%s"' % (python_exe, filename))

    zipfile.write(filename, dest_path)


 类似资料:
  • 我在根目录中有2个文件 1-设置。派克 2-img。巴布亚新几内亚 setup.py代码是: locateOnScreen获取一个位于名为"img"的根文件夹中的参数。PNG"当我直接通过vs代码命令行运行此代码时,它会运行,但当我通过pyInster使用以下命令构建文件时。 或 一个文件setup.py 两个命令都可以将我的文件构建为. exe格式。但是我的函数locateOnScreen不起作

  • 所以我有主python脚本,我想从我的主文件中调用另一个python脚本,但是,每当我这样做的时候,我调用的脚本就会超过原来的脚本控制台中的主脚本?

  • 问题内容: 我的问题是我想从另一个python文件中执行一个带有参数的python文件以获得返回值…。 我不知道我是否解释得很好… 例: 从外壳执行以下命令: 这会给我返回照相机清单。 所以我怎么能从另一个脚本中调用这个脚本(包括参数)呢? 我一直在尝试通过阅读此处的其他一些问题自己弄清楚,但是我做得不好,我应该使用execfile()函数吗?究竟如何? 在此先感谢您对像我这样的新手的帮助!! 好

  • 我试图构建我的项目的JRE捆绑exe文件,这是一个游戏,在本教程的帮助下使用,它创建了文件,但每当我运行这个文件时,它会给出两条错误消息: 出现JNI错误,请检查您的安装。 Java异常发生(JVM启动器)。 附言:我的项目在文件夹中包含额外的JAR文件()。

  • 问题内容: 我有一个长期运行的python脚本,希望能够从另一个python脚本结束。理想情况下,我正在寻找一种将进程ID设置为第一个脚本并能够从第二个脚本通过该ID查看其是否正在运行的方法。此外,我希望能够终止该长时间运行的过程。 有没有很酷的捷径可以实现这一目标? 另外,我在Windows环境中工作。 我最近在这里找到了另一种答案:检查python脚本是否正在运行 问题答案: 您可以通过以下方

  • 我们如何从命令行运行多个jmeter脚本。我有以下脚本test1.jmx test2.jmx test.3.jmx 现在,如果我想从命令行传递线程和循环,我该怎么做?我知道对于一个脚本,我们可以使用以下语法线程 ${__P(“线程”,25)},但是对于多个脚本,我们该怎么做