【问题标题】:how to create a single python file from dependencies如何从依赖项创建单个 python 文件
【发布时间】:2014-04-21 04:04:06
【问题描述】:

我想从 python 创建一个仅依赖于 python 模块的单个文件,例如 numpy、sys 等

执行此操作的手动方法是查看每个导入并复制->将正在导入的任何内容粘贴到该位置并删除import 命令。有没有办法以编程方式或通过 eclipse/pydev 更快/更快地做到这一点?

我认为也许 pyc 文件会这样做,但那不起作用。

谢谢

编辑:

文件1.py

def foo(arg1, arg2):
    return arg1 + arg2**arg1

文件2.py

import sys

from File1 import foo

arg1 = sys.argv[1]
arg2 = sys.argv[2]

print foo(arg1, arg2)

NewSingleFile.py 请注意,现在我有定义而不是 from bla import bla

import sys

def foo(arg1, arg2):
    return arg1 + arg2**arg1

arg1 = sys.argv[1]
arg2 = sys.argv[2]

print foo(arg1, arg2)

【问题讨论】:

  • looking at each import and copy->paste whatever it is importing at that location 和 delete the import command 是什么意思?
  • 我编辑了这个问题以举例说明我的意思,希望它能澄清我的意思。

标签: python


【解决方案1】:

不幸的是 - 至少在一般情况下 - 这不是微不足道的,因为许多模块(尤其是 NumPy 等)不是纯 Python 代码,因此内联它们会非常困难。

对于所有导入都是纯 Python 的特定情况,可以使用 AST 模块(解析代码)和“eval”(运行代码)的某种组合。像这样的:

import foo

会变成:

foo_module = types.ModuleType("foo")
exec """# this is foo.py …""" in foo_module.__dict__
sys.modules["foo"] = foo_module
import foo

【讨论】:

  • 等等,我认为这是错误的方式。我正在尝试使用我编写的模块来执行此操作,而不是使用 python 模块。即from ModIWrote import fooIwrote变成def fooIwrote(): etc
  • 我也收到一条错误消息:type object 'type' has no attribute 'ModuleType'
  • 错误,抱歉,应该是types.ModuleType
  • 另外,理论上你想要的是(有点)是可能的,但要做到正确会非常复杂......你的动机是什么这样做?
  • 我正在尝试创建一种并行编程类型的情况,在每台机器(可能是 AWS 服务器)上,我只想拥有一个需要运行的文件,而不是复杂的文件树。见stackoverflow.com/questions/23186701/… 和stackoverflow.com/questions/23166177/…
猜你喜欢
  • 2012-07-01
  • 2017-10-02
  • 2021-09-15
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多