首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从多个脚本构建单个python文件?

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

Stack Overflow用户
提问于 2012-01-25 19:54:20
回答 5查看 54.4K关注 0票数 44

我有一个简单的python脚本,它导入了我编写的各种其他模块(等等)。由于我的环境,我的PYTHONPATH是相当长的。我也在使用Python2.4。

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

理想情况下,我希望发送一个以某种方式嵌入所有所需模块的.py文件,但我会满足于自动构建一个只需解压缩的压缩文件,所需的模块都在一个目录中。

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

编辑我似乎不太清楚我想要的是什么。我基本上是在寻找像py2exe这样的东西,它将从给定的python脚本中产生一个文件(或2个文件),自动包含所有导入的模块。

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

代码语言:javascript
复制
[\foo\module.py]
def example():
    print "Hello"

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

然后我跑起来:

代码语言:javascript
复制
cd \bar
set PYTHONPATH=\foo
program.py

那么它就会起作用。我想要的是能够说:

代码语言:javascript
复制
magic program.py

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-02 18:01:33

我已经想出了一个解决方案,它涉及到modulefinder、编译器和zip函数,运行良好。不幸的是,我不能在这里粘贴工作程序,因为它与其他无关的代码混合在一起,但这里有一些代码片段:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2017-03-13 21:22:44

使用stickytape模块

代码语言:javascript
复制
stickytape scripts/blah --add-python-path . > /tmp/blah-standalone

这将产生一个正常运行的脚本,但不一定是人类可读的。

票数 14
EN

Stack Overflow用户

发布于 2012-01-25 19:59:05

您应该创建一个egg文件。这是python文件的归档文件。

请参阅此问题以获得指导:How to create Python egg file

更新:考虑2019年的车轮

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9002275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档