linux 在虚拟环境之外运行Python代码

yx2lnoni  于 2023-08-03  发布在  Linux
关注(0)|答案(1)|浏览(120)

我想为我的Linux Python程序做一个安装程序。作为安装程序的一部分,它检查依赖项和Python版本。但是,安装程序被pyarmor混淆,并使用pyinstaller打包成“onefile”二进制文件。因此,构建安装程序的Python解释器也与应用程序捆绑在一起。因此,当程序检查安装了什么版本的Python时,它会一直返回捆绑的解释器的版本,而不是用户计算机上安装的版本。有没有办法在虚拟环境之外运行Python代码,以便在用户的计算机上安装Python版本?
我尝试过各种方法,比如用检查python版本的代码生成一个python文件,然后在顶部放置一个shebang,指向安装在用户计算机上的python二进制文件,但它总是以权限拒绝返回。我甚至尝试运行chmod命令来给予python文件可执行权限,但我猜我的程序不能在没有用户的情况下进行权限更改。
我真的很感激任何提示或指示。谢谢你!

1szpjjfi

1szpjjfi1#

是的,有一种方法可以在虚拟环境之外运行Python代码,并将Python版本安装在用户的计算机上。您可以通过使用subprocess模块执行安装在用户系统上的单独Python解释器来实现这一点。以下是您的操作方法:
1.创建一个单独的脚本来获取Python版本:首先,创建一个简单的Python脚本,我们称之为get_python_version.py,它将打印Python版本。

# get_python_version.py

import sys

print(sys.version)

字符串
1.修改主安装程序脚本:在主安装脚本中,在检查依赖项和捆绑解释器的Python版本之后,您需要使用subprocess来执行get_python_version.py脚本和系统的Python解释器并捕获输出。

import subprocess

# Check for bundled interpreter version
bundled_python_version = "3.8"  # Replace this with the version of the bundled interpreter

# ... Perform checks for dependencies ...

# Now, execute the external Python script to get the system's Python version
try:
    output = subprocess.check_output(["python", "get_python_version.py"], universal_newlines=True)
    system_python_version = output.strip()
except subprocess.CalledProcessError as e:
    print("Error executing the external Python script:", e)
    sys.exit(1)

print("Bundled Python version:", bundled_python_version)
print("System Python version:", system_python_version)

  1. Package 和分销:使用pyinstaller打包安装程序时,请确保从包中排除get_python_version.py脚本。这样,脚本将使用用户安装的Python解释器而不是捆绑的Python解释器来执行。
    通过这种方法,您的安装程序将能够通过在虚拟环境和捆绑的解释器之外运行代码来准确地确定安装在用户系统上的Python版本。

相关问题