【问题标题】:I need a stand alone python interpreter/compiler! [closed]我需要一个独立的 python 解释器/编译器! [关闭]
【发布时间】:2010-12-11 15:02:55
【问题描述】:

好的,所以我需要一个 python 编译器(从 .py 或 .pyw 到 .exe)。

我遇到的只有:

- cx_freeze(不起作用)

- py2exe(太复杂了)

编辑: 上面的两个程序都很复杂(对我来说),因为你必须制作所有这些设置文件,并输入一堆参数和命令才能让它们工作,我找到了一个名为 gui2exe.py 但我似乎无法理解的东西正确加载...有什么想法吗?

所以我一直在寻找的是一个您不必通过 python 命令行运行的程序。最好是一个独立的程序,您只需选择文件并选择输出(.exe)并单击转换。没有什么太复杂的,因为我才刚刚开始。

我想要这个的原因是因为我有一个程序,我的朋友想看看,但他不想下载 python 来查看它。我也不希望他能够更改源代码。

有什么想法吗?

【问题讨论】:

  • 这两个已经知道主要选项了。您问错了问题,您应该 (1) 告诉我们 what 不适用于 cx_Freeze,以便我们帮助解决它或 (2) 寻求帮助以开始使用 py2exe。此外,您可能期望过高(“只需选择文件和输出” - 许多非平凡的程序具有任何程序无法静态检测到的依赖项)。
  • 好吧,这部分你可能是对的,当我打开 cx_freeze 时,它​​什么也没做,它只是一个非常小的批处理文件。我真的不明白它是如何编译任何东西的......另外,我如果我要编译“test.py”并将 .exe 文件输出到“F:\scripts\python”,想确切知道要输入什么
  • py2exe 非常简单。除非您的设置很复杂,否则它不会“太复杂”,但您只字不提是什么让它变得复杂。
  • 我认为它们中的任何一个实际上都没有编译任何东西。
  • 您尝试过什么,发生了什么,您预计会发生什么? (用该信息更新您的问题)。 py2exe.org/index.cgi/Tutorial

标签: python compiler-construction


【解决方案1】:

Pyinstallet 可能会有所帮助...

不过py2exe并不复杂……

看看这个 py2exe 示例设置(从这里开始,但它是意大利语,所以我翻译了它http://bancaldo.wordpress.com/2010/05/13/python-py2exe-setup-py-sample/

#!/usr/bin/python

from distutils.core import setup
import py2exe, sys, wx, os

# Se eseguito senza argomenti, crea l'exe in quiet mode.
# If executed without args, it makes the exe in quiet mode
if len(sys.argv) == 1:
    sys.argv.append("py2exe")
    sys.argv.append("-q")

class FileBrowser(wx.FileDialog):
    def __init__(self):
        wildcard = "Python files (*.py)|*.py|" \
            "Tutti i files (*.*)|*.*"
        dialog = wx.FileDialog(None, "Choose the file", os.getcwd(),
            "", wildcard, wx.OPEN)
        if dialog.ShowModal() == wx.ID_OK:
            print(dialog.GetPath())
        self.file = dialog.GetPath()
        self.fin = open(self.file, 'r')
        dialog.Destroy()

class Target:
    def __init__(self, **kw):
        self.__dict__.update(kw)
        # info di versione
        self.version = "1.0.0"
        self.company_name = "Bancaldo TM"
        self.copyright = "no copyright"
        self.name = "py2exe sample files"

manifest_template = '''
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
     type='win32'
     name='Microsoft.VC90.CRT'
     version='9.0.21022.8'
     processorArchitecture='*'
     publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
         type="win32"
         name="Microsoft.Windows.Common-Controls"
         version="6.0.0.0"
         processorArchitecture="*"
         publicKeyToken="6595b64144ccf1df"
         language="*" />
    </dependentAssembly>
  </dependency>
</assembly>
'''
# File Browser
app = wx.PySimpleApp()
fb = FileBrowser()
# Assegno il nome all'eseguibile di uscita
# Give the name at the exe file being created
textentry = wx.TextEntryDialog(None, "name file EXE?",'','')
if textentry.ShowModal() == wx.ID_OK:
    destname = textentry.GetValue()

RT_MANIFEST = 24

test_wx = Target(
    description = "A GUI app",
    script = fb.file,     # programma sorgente dal quale creiamo l'exe
                          # source from wich we create the exe
    other_resources = [(RT_MANIFEST, 1, manifest_template % dict(prog="tried"))],
    icon_resources = [(1, "py.ico")],
#    dest_base = "prova_banco") # Nome file di destinazione
                                #Name Destination file
    dest_base = destname) # Nome file di destinazione

setup(
    data_files=["py.ico"],
    options = {"py2exe": {"compressed": 1,
                          "optimize": 2,
                          "ascii": 1,
                          "bundle_files": 1}},
    zipfile = None,
    windows = [test_wx],
    )

它还包括一个小型图形界面,可帮助您选择文件;)

编辑:

这是一个更简单的示例,也许它更有用:)

from distutils.core import setup
import py2exe
setup(
    name = 'AppPyName',
    description = 'Python-based App',
    version = '1.0',
    windows = [{'script': 'Main.pyw'}],
    options = {'py2exe': {'bundle_files': 1,'packages':'encodings','includes': 'cairo, pango, pangocairo, atk, gobject',}},
    data_files=[ 'gui.glade',]
    zipfile = None, 
)

分步教程:

1-创建一个.py文件,命名它,例如'hello.py',它没有GUI 2- 制作 setup.py 文件

from distutils.core import setup
import py2exe

setup(console=['hello.py'])

注意使用 'console' 而不是 'windows',因为你没有 gui

然后,将你的 hello.py 文件和你的 setup.py 文件移动到 Python 目录中;然后打开 cmd,一旦你到达正确的目录(通常是 C:\python2x),输入:

python setup.py py2exe

你的 exe 文件将在 dist 目录中。如果某些 .dll 丢失,只需下载它并放在 python 目录中。

一旦你的程序变得更复杂,它可能需要其他指令;查看我发布的其他 2 个 setup.py 示例。 希望对您有所帮助

【讨论】:

  • 好的,这是 setup.py 文件的示例吗?或 setup.py 文件可以编译的程序示例...我尝试在上面运行您的脚本但它没有打开,我需要从 python cmd 运行它吗?
  • 这是 setup.py 文件的一个例子,即使你可以写一个更简单的文件(我编辑了我的代码以便显示它);) 你安装 wx 了吗?如果不起作用,请尝试在代码中添加 'app.mainloop()' ;)
  • 不,我还没有安装 wx,我还要在你的脚本中的什么地方添加 'app.mainloop()'?
  • @daniel11:cmd通常表示Windows命令行,因为如果你去启动,运行,然后输入“cmd”,它会给你命令提示符。
  • @daniel 因此,对于需要显示文本且不在循环中的控制台应用程序,您必须在文件末尾添加 raw_input() 以使窗口继续为您提供是时候看看输出了。如果你有一个 gui 应用程序,在 .pyw 中重命名你的 .py 文件将使它在没有 python 控制台的情况下打开。
【解决方案2】:

一种选择可能是使用 IronPython。 IronPython 是另一种以 .NET 为目标的 Python 方言,可以很容易地与 MS Visual Studio 一起使用。

【讨论】:

  • +1 虽然我会再次推荐 py2exe。这很简单。
【解决方案3】:

py2exe - Python 到 Windows 的 EXE py2exe 将您的 Python 程序转换为独立的 Windows 可执行文件,无需用户安装 Python 即可运行。请注意,这不是本机代码编译器 - 您的代码仍会被解释。 py2exe 仅提供所有必要的部分,因此当您的最终用户双击您的可执行文件时,Python 解释器将启动以解释您的代码。 py2exe 是在 Mozilla Public License 下发布的

【讨论】:

  • 其中一些(它不是本地编译的部分)可能很有趣,但我认为它没有以任何方式解决这个问题?
【解决方案4】:

看看gui2exe,它是py2exe、pyinstaller等的一个相当不错的前端。

【讨论】:

  • 好的,我得到了 gui2exe,它看起来可以工作,但是当我双击我下载的 zip 文件夹中的 gui2exe.py 文件时,它没有打开,当我输入“python GUI2exe.py”时进入python命令行,它会出现语法错误。我该如何解决这个问题?
  • 您能发布您看到的语法错误吗?还要检查以确保你已经安装了所有你需要的包——我认为至少加载 GUI 的唯一要求是 wxPython,但我已经有一段时间没有使用这个程序了。
  • 好的,我尝试在 cmd 中输入“python gui2exe.py”,现在它说“没有模块 ”但是我安装并重新安装了 20 次“
  • 这很奇怪——它不应该加载 py2exe,直到 GUI 启动并且你告诉它,因为它是一堆不同编译器的前端。如果将 GUI2exe.py 重命名为 GUI2exe.pyw 会发生什么?这有时会修复您在 Windows 上的 Python 中看到的奇怪错误。
  • ok 将扩展名更改为 .pyw 没有做任何事情...此外,当我尝试使用“python gui2exe.py”通过 cmd 运行它时,我收到一条错误消息“导入错误:DLL 加载失败: %1 不是有效的 win32 应用程序。”有什么想法吗?
【解决方案5】:

这不是我向初学者推荐的东西,但如果你对 C/C++ 编译器感到满意,你可以试试Shed Skin。如果您的 Python 源代码满足某些要求,Shed Skin 可以将其翻译成 C++,并将 C++ 编译成二进制可执行文件。

【讨论】:

  • 这并不是一个比使用 py2exe 更更简单 的解决方案...
  • @Robert Liffredo:我不反对,但你永远不知道有些人会发现什么更容易或更难。我认为值得在那里提出另一个选择。此外,出于与 OP 不同的最终目的而查找此问题的其他人可能会发现 Shed Skin 很有用。
【解决方案6】:

您也可以简单地向您的朋友提供一个包含 python.exe、python 库和您的 python 应用程序(在 pyc 中)的 ZIP 文件,以及一个批处理以使用您的脚本启动 python.exe。 Python 无需“安装”即可相当容易运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2011-03-23
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多