Python:是不是有可能只有 sys.path 中的文件夹中的特定模块

Posted

技术标签:

【中文标题】Python:是不是有可能只有 sys.path 中的文件夹中的特定模块【英文标题】:Python: Is it possible to only have specific modules from a folder in your sys.pathPython:是否有可能只有 sys.path 中的文件夹中的特定模块 【发布时间】:2012-04-21 09:17:56 【问题描述】:

我只需要来自包含其他几个 python 模块的文件夹中的一两个模块。当我将文件夹添加到我的路径时,我有效地使该文件夹中的所有模块都可供我使用。但是有几个我不想要的过时的模块。是否可以只为我提供这些模块的某个子集?

【问题讨论】:

不要导入过时的? 把过期的移到另一个文件夹? Linux,具体来说是 ubuntu。我在这台机器上没有 sudo 权限。 【参考方案1】:

阅读您的问题,我明白了

    您将文件夹包含在您的 pythonpath 中,因为您需要其中的几个模块。 由于它包含一些与您使用的版本相比可能已经过时的其他模块,因此您不希望最终导入错误的库。

我会建议两个可能对你有用的选项。

    确保您包含的此文件夹位于sys.path 的末尾。这将确保您已经导入的任何模块(如果存在于新包含的文件夹中)永远不会从该特定位置导入。 (仅适用于 *nix)创建另一个文件夹,并为您感兴趣的文件创建一个符号链接。然后您应该包含您创建的其他文件夹。

阅读您的评论,我建议,最好的选择是在您的脚本中的某处添加以下行,但在您导入之前`

import sys
sys.path.append('/whatever')

【讨论】:

是的,这正是我要问的。无论如何要确保我包含的文件夹位于 sys.path 的末尾?例如,PYTHONPATH 中的目录何时添加有明确的顺序吗? @ChristopherDorian:您打算如何将路径添加到 sys.path?如果你澄清它会更容易回答。一种明显的方法是import sys\nsys.path.append("/whatever")。这将确保您的库位于搜索路径的末尾。你还有其他方法吗? 现在,我一直在使用 PYTHONPATH 添加文件夹。到目前为止,它出现在 sys.path 中我自己的本地库下方,但我不确定是否会一直如此。 @ChristopherDorian:查看文档中的PYTHONPATH 参考。它说,默认搜索路径取决于安装。所以你最好的安全选择是我在回答中提到的。 是否有与 PYTHONSTARTUP 等效的我可以将这些行添加到其中?将这两行添加到我运行的每个 python 文件中对我来说可能很麻烦。【参考方案2】:

如果你

import X

导入模块 X。没有别的。在你的 python 路径上的东西并不等同于被自动导入(它只是 importable)。另见:

http://effbot.org/zone/import-confusion.htm http://docs.python.org/tutorial/modules.html

【讨论】:

我实际上是指可以导入,而不是实际导入。例如,我在 virtualenv 中个人安装了 numpy,并且全球系统上有一个过时的版本。我只想要全局库中的 PyQt,但我不想冒险让旧版本的 numpy 与全局版本发生冲突。【参考方案3】:

创建一个新目录。对于要导入的每个模块,添加一个指向真实模块的符号链接 (ln -s)。然后将新目录添加到您的路径中,您将不必使用包含顺序玩游戏。

mkdir ./mymods
export PYTHONPATH="$PYTHONPATH":`pwd`/mymods 
cd mymods
ln -s ../allmods/module1.py 
ln -s ../allmods/module2.py

【讨论】:

以上是关于Python:是不是有可能只有 sys.path 中的文件夹中的特定模块的主要内容,如果未能解决你的问题,请参考以下文章

Python常用标准库之sys

为什么使用sys.path.append(path)而不是sys.path.insert(1,path)?

python导入上层目录的方式

Python:sys.path

Python sys.path详解

python sys.path 从哪里