3
4

2 回答 2

2

乱搞sys.path()会导致痛苦......现代包模板分发包含大量信息,并且部分设置为解决您的问题。

我要做的是设置 setup.py 将所有包安装到特定的站点包位置,或者如果你可以将它安装到系统的站点包。在前一种情况下,本地站点包将被添加到系统/用户的 PYTHONPATH 中。在后一种情况下,无需更改任何内容

您也可以使用批处理文件来设置 python 路径。或者将 python 可执行文件更改为指向包含修改后的 PYTHONPATH 的 shell 脚本,然后执行 python 解释器。当然,后者意味着您必须有权访问用户的机器,而您没有。但是,如果您的用户只运行脚本而不导入您自己的库,您可以使用自己的脚本包装器:

#!/path/to/my/python

脚本将/path/to/my/python类似于:

#!/bin/sh
PYTHONPATH=/whatever/lib/path:$PYTHONPATH /usr/bin/python $*
于 2013-02-22T14:49:05.287 回答
1

我认为你应该看看路径导入钩子,它允许在搜索模块时修改 python 的行为。

例如,您可以尝试为 python 插件[1] 做类似 kde 的脚本引擎所做的事情。它添加了一个特殊的标记sys.path(就像"<plasmaXXXXXX>"XXXXXX一个随机数,只是为了避免名称冲突),然后当 python 尝试导入模块并且在其他路径中找不到它们时,它会调用可以处理它的导入器。

一个更简单的替代方法是使用一个主脚本作为启动器,它只是添加路径sys.path并执行目标文件(这样您就可以安全地避免sys.path.append(...)在每个文件上放置该行)。

另一种适用于 python2.6+ 的替代方法是将库安装在 per-user site-packages 目录下。


/usr/share/kde4/apps/plasma_scriptengine_python[1] 你可以在使用 kde 的 linux 安装中找到源代码。

于 2013-02-22T15:01:29.613 回答