python作为翻译的唯一目的究竟是什么。
它不提供可执行文件(商业软件开发人员如何使用它?)
如果代码的任何部分有错误,除非python,否则它不会显示 在跑步时去那条线。在大型项目中,代码的所有部分 不会每次都被解释,所以,会有很多 项目中隐藏的错误
每个系统都应该安装一个python来运行这些软件......
我正在使用py2exe,我发现自己很难看到可执行文件 size (太大)。
答案 0 :(得分:12)
首先,回答你的问题。
他们可以将它用于系统的部分,他们不介意源是可见的(例如扩展),或者他们可以开源他们的应用程序。他们还可以使用它为他们作为服务提供的东西(例如Youtube)开发后端服务。他们也可以将它用于他们不打算发布的内部工具(例如Google)。
这就是为什么你需要定期编写测试,练习纪律和测量测试覆盖率的原因。你牺牲编译器检查事物的能力和一些速度来获得优势,我将在下面详述。
是的,但将Python与您的应用捆绑在一起并不困难。整个翻译+库并不是那么大。 Python几乎是当今大多数UNIX环境的标准。这通常不是一个实际问题。 (例如)Java(你需要安装JVM)也存在同样的问题。
py2exe将所有模块捆绑成一个可执行文件。它会很大。如果你想做精简的编译程序,不要使用Python。错误的合适。
现在,为什么“解释”了几个原因。
答案 1 :(得分:3)
您提出了一些不同的问题,以下是一些回复:
1)从技术上讲,Python不会被解释(通常) - 它被编译为字节码,而字节码在虚拟机上运行。
因此Python不提供可执行文件,因为它运行字节码而不是机器代码。 您也可以问为什么Java不会生成可执行文件。 虚拟机的标准优势适用:最重要的是简化的跨平台开发体验。
如果您不希望您的源可用,则可以仅分发.pyc(已编译的字节码)文件。 See this reference
2)在这里,您谈论的是动态语言与静态语言。当然,有一些权衡。正如您所提到的,动态语言的一个缺点是,您会遇到更多的运行时错误而不是编译时错误。
当然,有相应的优点。我会指出你讨论双方的一些资源:
3)非常正确。正如您需要安装Java VM来运行Java,perl运行Perl等等
关于你的最后一点: 在VM中运行的整个想法是,您可以安装该VM一次,然后运行许多不同的应用程序。通过将整个VM捆绑到每个应用程序(例如使用py2exe),您将违背该概念。所以,是的,你必须按照规模支付费用。
答案 2 :(得分:1)
python的唯一目的是提供一种优美的语言来编程。
您的观点#1和#3是相似的,答案是专业程序员使用py2exe / pyinstaller等捆绑他们的程序并分发,在框架/库的情况下,他们甚至不需要这样做。
您的第2号点对于静态编译的语言也有效,在C ++中正确编译并不意味着它不会在运行时崩溃或业务逻辑是正确的,您无论如何都需要测试代码的每个部分,因此,通过良好的单元测试和功能测试,python在查找错误方面与其他语言相当,因为它不需要被编译,而且动态意味着更高的生产力。
IMO
答案 3 :(得分:0)
python .exe必须包含python解释器的完整副本。正如你所说,因为它被解释为在实际运行该行之前它不会触及每一行代码。某些部分实际上可能会调用python解析/编译序列(例如eval()
,某些正则表达式等等)。除非有完整的解释器,否则这些将在编译的.exe中失败。
答案 4 :(得分:0)
互动性好。我发现它鼓励制作小型,易于测试的功能,这些功能可以组合在一起构成应用程序。
除非您编写简单的静态链接应用程序,否则通常会为编译语言提供一些必须包含或安装的运行时行李(mfc,dot net等)。查看winsxs文件夹。当然,你可以在大多数时间里“分享”这些东西,但是如果隐藏的话,“需要”的需求还有很大的空间。
就bug而言,运行时错误无论如何都是一样的。任何优秀的程序员在进行更改时都会尽可能多地进行测试。这应该可以捕获其他语言中的编译时错误,以及测试运行时行为。
答案 5 :(得分:0)
Python不是解释器,而是解释语言。
这个问题更多的是解释语言VS编译语言,实际上没有其他答案,通常“它取决于你的需要”。
详情请见Noufal Ibrahim,但我不确定这个问题是否适合SO。
答案 6 :(得分:0)
(1)您可以为Python代码提供安装程序(可以安装Python环境)。这并不妨碍您拥有商业代码。请注意,您还可以使用Java(也是“解释”或JIT编译的)商业或桌面代码,并要求您的用户安装JRE。
(2)任何语言,即使是编译和强类型,也可能产生只在你到达给定代码时出现的错误(例如除以零)。我想你可能指的是强大的vs.松散类型的语言。这不仅仅是编译问题,而是强类型语言通常可以在编译过程中更容易找到“结构”错误(例如,尝试将字符串用作数字)。相比之下,松散类型的语言通常会导致代码更短,这可能更容易管理。使用什么取决于您的应用程序的目标。