【问题标题】:My python exe will not run 2 other python exe's我的 python exe 不会运行其他 2 个 python exe
【发布时间】:2019-03-12 10:40:00
【问题描述】:

编辑:已修复!

我向我的朋友展示我制作的大部分 Python 程序,有时我也会为他们制作小程序(受委托)。我制作了一个运行MS Paint 的程序,并写了一些在这里可以说或不可以说的词(这是高中)。

为此,我使用了 pyautogui(顺便说一句,非常棒的模块)。我使用了一个名为 RunMe 的文件来运行两个单独的文件。一个打开Paint,另一个绘制单词。

我做这个的朋友不想在他的电脑上安装python,所以我编译了这些文件(认为这会让它们工作)。他们不能在他的电脑上工作,所以我试着把它们做成 .exe 的。

python 文件可以像普通的 .py 和 .pyc 文件一样工作,但是当我将它们转换为 .exe 时,它​​们不起作用。

我能找到的最接近的东西 this 不一样,因为我可以运行该文件,但它不会运行其他 2 个。

这是文件的代码:

RunMe.exe这个运行文件):

from threading import Thread

def one(): import openpaint.exe
def two(): import drawmychilddraw.exe

Thread(target=one).start()
Thread(target=two).start()

DrawMyChildDraw.exe这个是用来画字母的):

import pyautogui as pg
import time as t
import math as m

pg.moveTo(400, 450, 0.1)

## this is a U

pg.drag(0, 200, 0.1)

pg.drag(50, 0 , 0.1)

pg.drag(0, -200, 0.1)

pg.moveRel(100, 200, 0.1)

## This is an H

pg.drag(0, -200, 0.1)

pg.moveRel(0, 100, 0.1)

pg.drag(50, 0, 0.1)

pg.moveRel(0, 100, 0.1)

pg.drag(0, -200, 0.1)

## this is an O

pg.moveRel(0, 100, 0.1)

pg.moveRel(50, 0, 0.1)

pg.drag(50, 0, 0.1)

pg.drag(0, 100, 0.1)

pg.drag(-50, 0, 0.1)

pg.drag(0, -100, 0.1)

## this is an E

pg.moveRel(100, 0, 0.1)

pg.drag(50, 0, 0.1)

pg.drag(0, 50, 0.1)

pg.drag(-50, 0, 0.1)

pg.drag(0, -50, 0.1)

pg.drag(0, 100, 0.1)

pg.drag(50, 0, 0.1)

## this is a !

pg.moveRel(100, 0, 0.1)

pg.drag(0, -25, 0.1)

pg.moveRel(0, -25, 0.1)

pg.drag(0, -150, 0.1)

pg.moveRel(0, 200, 0.1)

RunPaint.exe这会运行 MS Paint):

import os
os.system('C:\\WINDOWS\\system32\\mspaint.exe')

如果有人知道可能导致此问题的原因或如何解决此问题,那将是非常棒的。谢谢!

编辑:已修复!

【问题讨论】:

  • 为什么不把你的三个脚本合二为一呢??
  • “他们没有在他的电脑上工作” 我想你应该先解决这个问题。是什么让您认为将它们编译成 .exe 会使它们工作?
  • @Reedinationer 我试着从那个开始,但最后我遇到了很多问题,三个脚本解决方案解决了。
  • @Selcuk 那是因为它们是python形式的,他没有安装python。他的电脑运行着和我一样的操作系统,而且规格稍好一些。使用 .exe 的全部目的是尝试解决问题,但是,当我在计算机上对其进行测试时,.exe 不起作用,所以我来这里询问为什么会这样。

标签: python-3.x


【解决方案1】:

如何将代码简化为单个脚本:

from threading import Thread
import pyautogui as pg
import os
import time


def main():
    t = Thread(target=open_paint)
    t.start()
    time.sleep(5)
    draw_uhoe()


def open_paint():
    os.system('C:\\WINDOWS\\system32\\mspaint.exe')


def draw_uhoe():
    print('drawing')
    pg.moveTo(400, 450, 0.1)

    # this is a U

    pg.drag(0, 200, 0.1)
    pg.drag(50, 0, 0.1)
    pg.drag(0, -200, 0.1)
    pg.moveRel(100, 200, 0.1)

    # This is an H

    pg.drag(0, -200, 0.1)
    pg.moveRel(0, 100, 0.1)
    pg.drag(50, 0, 0.1)
    pg.moveRel(0, 100, 0.1)
    pg.drag(0, -200, 0.1)

    # this is an O

    pg.moveRel(0, 100, 0.1)
    pg.moveRel(50, 0, 0.1)
    pg.drag(50, 0, 0.1)
    pg.drag(0, 100, 0.1)
    pg.drag(-50, 0, 0.1)
    pg.drag(0, -100, 0.1)

    # this is an E

    pg.moveRel(100, 0, 0.1)
    pg.drag(50, 0, 0.1)
    pg.drag(0, 50, 0.1)
    pg.drag(-50, 0, 0.1)
    pg.drag(0, -50, 0.1)
    pg.drag(0, 100, 0.1)
    pg.drag(50, 0, 0.1)

    # this is a !
    pg.moveRel(100, 0, 0.1)
    pg.drag(0, -25, 0.1)
    pg.moveRel(0, -25, 0.1)
    pg.drag(0, -150, 0.1)
    pg.moveRel(0, 200, 0.1)

main()

在我看来,只有一个脚本更容易,但并非完全必要。 完成后,在同一目录中创建另一个名为 setup.py 的 python 文件:

setup.py

import sys
import os
from cx_Freeze import setup, Executable

PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')

# Dependencies are automatically detected, but it might need fine tuning.
additional_modules = []

build_exe_options = {"includes": additional_modules,
                     "packages": ["threading", "pyautogui", "os", "time"],
                     "excludes": [],
                     "include_files": [
                                       os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
                                       os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll')
                                       ]}

# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(name="LetterDrawer",
      version="1.0",
      description="U hoe!",
      options={"build_exe": build_exe_options},
      executables=[Executable("workspace.py", base=base)]) #change workspace.py to your file name

现在在该文件夹中打开一个终端并运行python setup.py build。这将在名为build 的新目录中为您创建一个可执行文件。 (您可能必须运行该命令两次)。现在打开该文件夹并运行 .exe 以检查它是否有效。如果是,您必须将 whole 文件夹与 .exe(包括所有 .dll)一起发送给您的朋友。这将允许他们在没有安装 python 的情况下运行程序(因此所有 dll)。在我的机器上使用提供的代码执行此操作创建了一个可执行文件来完成所需的任务。如果您对我不清楚的事情有任何疑问,请告诉我,否则如果这解决了您的问题,如果您单击我帖子中的复选标记以接受它作为解决方案,我将不胜感激

【讨论】:

  • 当我尝试安装 cx_Freeze 时,它​​“无法构建轮子”。我尝试安装它两次,两次都发生了这种情况。如果您知道为什么会这样,并且您可以告诉我,当您有时间时,将不胜感激。谢谢!
  • 别在意我之前的评论,这是我的python版本的问题。
  • 感谢您提供此解决方案。我已经 10 次回到这里使用 py -> exe 代码 lmao
猜你喜欢
  • 2022-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多