【问题标题】:Pack python code into an executable without losing interpreting features将 python 代码打包成可执行文件,而不会丢失解释功能
【发布时间】:2021-08-15 17:30:07
【问题描述】:

我需要制作一个从系统(在我的例子中是 Linux)中获取一些变量的可执行文件。
我为此尝试了 nuitka,但是在另一台机器上进行测试时,我看到它使用了我编译它的机器上的变量。
我需要的是程序从运行它的机器上获取所需的数据(例如,我得到用户的主文件夹)。它试图搜索编译文件所在机器的用户,这有点毁了整个要点。

编辑:添加代码以进行澄清

username = pexpect.run('whoami')
userpath = '/home/{}'.format(username)
filename = __file__
filename = filename[2:]
pexpect.run('cp {} {}/{}'.format(filename, userpath, filename))

当它作为 .py 运行时,它会获得正常工作所需的一切,例如正确的用户名和文件名。但是当我通过 nuitka 运行它并在另一台机器上作为 .exe 运行时,它使用的名称就像我在我写它的机器上运行它一样。例如。 '/home/user1' 代替 '/home/user2' 和 'filename.py' 代替 'filename.exe'。

【问题讨论】:

  • 阅读How to Ask 你的问题不清楚;什么变量,从哪里来?你如何将你的 python 代码转换成可执行文件?请在您的问题中编辑 minimal 代码示例,并用具体示例解释它的错误之处 - 如果有错误消息,请在您的问题中编辑 full 错误消息作为文本
  • 你能澄清你的问题吗?编译源代码的全部目的是使程序使用源代码。这会影响源代码的每个功能,例如它的位置。您是否正在尝试获取可执行位置?
  • 好吧,我需要生成的文件是一个可执行文件,其行为方式与我刚刚运行python filename.py
  • 请注意,运行whoamipwd等不需要使用pexpect。 Python 已经为这些东西提供了绑定,例如os.getuid()/getpass.getuser()os.getcwd()。避免这些事情,尤其是重构与环境相关的其他值——例如,使用Path.home()获取主目录即使它不在/home。跨度>
  • 看来你在看for this

标签: python linux python-2.7


【解决方案1】:

如果我理解正确,您在使用绝对路径和相对路径时遇到了问题。您应该在代码中尝试以下操作:

  1. 使用相对路径:例如:代替 /usr/you/random/heresyourprogram/data,您可以简单地使用 /data。
  2. 在python中有几个函数可以找到当前文件夹和当前文件夹中的文件夹。您可以编写一个算法来查找当前文件夹。
  3. 或者,如果您没有找到文件夹/文件,您可以随时打印错误并告诉用户,他们应该在哪里运行您的程序。

希望我的回答能帮到你!

【讨论】:

  • 好吧,我使用 pexpect 运行 bash 命令(如 pwd 等)来获取我需要的信息,所以理论上它应该在运行相同操作系统的任何机器上运行相同。我尽量确保我永远不会硬编码路径或类似的东西。我用一些额外的信息编辑了这篇文章
猜你喜欢
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多