python - 分发 python 应用程序

标签 python

我正在编写一个相当大的 Python 应用程序;该应用程序实际上在很大程度上是几个用 C 和 C++(Qt) 编写的共享库的包装。我在没有管理员权限的情况下“安装”它,所以包括共享库、二进制文件和 Python 模块在内的所有内容都必须位于非标准位置,即我遇到这样的情况:

  1. /funny/path/lib 中的共享库
  2. 安装在/funny/path/python/lin 中的 Python 模块
  3. python 解释器本身也可能位于/nonstandard/location

整个东西都是开源的,我需要找到一个相当优雅和简单的方法来设置必要的环境变量。整个东西都是用版本控制软件分发的;所以必须在一些“本地添加”中设置环境变量,例如:

#!/bin/bash
export LD_LIBRARY_PATH /funny/path/lib:$LD_LIBRARY_PATH
export PYTHONPATH /funn/path/python/lib:$PYTHONPATH

# 
exec python main.py

但我使用 Python 编程是有原因的——我讨厌这些 shell 脚本。任何有关执行此操作的最优雅方法的意见都会很好。

乔金

最佳答案

为什么要浪费时间厌恶 shell 脚本?

由于您不会在标准位置安装,(并且似乎无法让系统管理员在标准位置安装所需的软件包)这几乎是您唯一的选择。

您可以在 Python 中设置 PYTHONPATH。它位于 sys.path 中。设置环境变量(如 LD_LIBRARY_PATH)比较困难,因为 Linux 限制了应用程序更改环境的方式。

您可以使用 os.exec 在修改后的环境中运行进程。使用 Python 然后执行 os.exec..e() 来调用 Python 有点奇怪,但这是设置额外环境变量的简单方法。

关于python - 分发 python 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5519222/

相关文章:

python - Django - 将属性值传递给 TemplateView 中的 as_view

python - python "slow"是如何进行游戏开发的?

Python:按字符位置分割字符串

python迷宫递归不递归

python - list.append 在 python 3 : nonetype is not iterable?

python - 在收敛于初始未知常量的同时消除运行系统中噪声的算法

python - Pyside 在 QtabWidget 中获取小部件

python - selenium.common.exceptions.ElementClickInterceptedException : Message: element click intercepted:

线程 : can't start new thread 中的 Python 异常

python - 为类 Markdown 语言实现解析器