如何从多个脚本构建单个python文件?
我有一个简单的python脚本,它导入了我编写的各种其他模块(等等)。由于我的环境,我的蟒蛇很长。我也在使用Python2.4 我需要做的是以某种方式打包我的脚本和所有不属于标准python的依赖项,以便我可以通过电子邮件将单个文件发送到另一个系统,在那里执行它。我知道python的目标版本是相同的,但它是在linux上,而我在Windows上。否则我就用py2exe 理想情况下,我希望发送一个以某种方式嵌入所有必需模块的.py文件,但我愿意自动构建一个zip,只需解压缩即可,所有必需的模块都在一个目录中 我看过各种包装解决方案,但似乎找不到合适的方法。我错过什么了吗 [编辑]我似乎很不清楚我在追求什么。我基本上在寻找类似py2exe的东西,它将从给定的python脚本生成一个文件(或两个文件),自动包含所有导入的模块 例如,如果我有以下两个文件:如何从多个脚本构建单个python文件?,python,Python,我有一个简单的python脚本,它导入了我编写的各种其他模块(等等)。由于我的环境,我的蟒蛇很长。我也在使用Python2.4 我需要做的是以某种方式打包我的脚本和所有不属于标准python的依赖项,以便我可以通过电子邮件将单个文件发送到另一个系统,在那里执行它。我知道python的目标版本是相同的,但它是在linux上,而我在Windows上。否则我就用py2exe 理想情况下,我希望发送一个以某种方式嵌入所有必需模块的.py文件,但我愿意自动构建一个zip,只需解压缩即可,所有必需的模块都在
[\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系统上安装模块。您应该创建一个egg文件。这是python文件的存档 请参见此问题以获取指导:
更新:考虑轮在2019
< P>你应该创建一个鸡蛋文件。这是python文件的存档 请参见此问题以获取指导:更新:考虑车轮在2019
< P> >你是否考虑过分配官方包装溶液? 您所做的是为您的程序提供入口点,这些入口点将转换为您可以运行的可执行文件。这样,您不必更改源代码布局,同时仍然可以轻松分发和运行您的程序您将在中找到此系统的一个实际应用程序的示例。您是否考虑过分发官方包装解决方案 您所做的是为您的程序提供入口点,这些入口点将转换为您可以运行的可执行文件。这样,您不必更改源代码布局,同时仍然可以轻松分发和运行您的程序
您将在该系统的真实应用程序中找到一个示例,发送单个.py的唯一方法是将所有模块中的代码移动到单个脚本中,并且它们必须重做所有操作以引用新位置 更好的方法是将相关模块移动到与命令相同目录下的子目录中。然后,您可以确保包含模块的子目录中有一个导入主模块文件的
\uuuu init\uuuu.py
。在这一点上,你可以通过它来引用事物
例如:
应用程序目录:/test
模块目录:/test/hello
/test/hello/\uuuuuu init\uuuuuuuu.py
内容:
import sayhello
def print_hello():
print 'hello!'
#!/usr/bin/python2.7
import hello
hello.sayhello.print_hello()
/test/hello/sayhello.py
内容:
import sayhello
def print_hello():
print 'hello!'
#!/usr/bin/python2.7
import hello
hello.sayhello.print_hello()
/test/test.py
内容:
import sayhello
def print_hello():
print 'hello!'
#!/usr/bin/python2.7
import hello
hello.sayhello.print_hello()
如果您运行
/test/test.py
您将看到它从现有目录下的模块目录运行print_hello函数,不需要对您的PYTHONPATH
进行任何更改 发送单个.py的唯一方法是,如果所有不同模块的代码都被移动到单个脚本中,那么它们必须重做所有操作以引用新位置
更好的方法是将相关模块移动到与命令相同目录下的子目录中。然后,您可以确保包含模块的子目录中有一个导入主模块文件的\uuuu init\uuuu.py
。在这一点上,你可以通过它来引用事物
例如:
应用程序目录:/test
模块目录:/test/hello
/test/hello/\uuuuuu init\uuuuuuuu.py
内容:
import sayhello
def print_hello():
print 'hello!'
#!/usr/bin/python2.7
import hello
hello.sayhello.print_hello()
/test/hello/sayhello.py
内容:
import sayhello
def print_hello():
print 'hello!'
#!/usr/bin/python2.7
import hello
hello.sayhello.print_hello()
/test/test.py
内容:
import sayhello
def print_hello():
print 'hello!'
#!/usr/bin/python2.7
import hello
hello.sayhello.print_hello()
如果您运行
/test/test.py
您将看到它从现有目录下的模块目录运行print_hello函数,不需要对您的PYTHONPATH
进行任何更改 如果您想将脚本及其所有依赖项打包到一个文件中(它不是.py文件),您应该查看。这是一个工具,可以让您构建一个沙盒环境来安装Python包,并管理所有路径、PYTHONPATH和LD_LIBRARY_路径问题,以确保沙盒是完全自包含的
如果您从未安装其他库的virgin Python开始,然后将依赖项安装到虚拟环境中,您将在VirtualEnvironment中创建一个只需要运行Python的项目
沙盒是一个目录树,不是一个文件,但对于分发版,您可以对其进行tar/zip压缩。我从未尝试过分发env,因此可能存在路径依赖,我不确定
相反,您可能需要分发一个构建脚本,用于在目标计算机上构建虚拟环境。是一个帮助自动化该过程的工具,有点像与Python包系统和PyPI紧密集成的“makeinstall” 如果您想将脚本及其所有依赖项打包到一个文件中(它不是.py文件),您应该查看。这是一个工具,可以让您构建一个沙盒环境来安装Python包,并管理所有路径、PYTHONPATH和LD_LIBRARY_路径问题,以确保沙盒是完全自包含的