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 中的文件夹中的特定模块的主要内容,如果未能解决你的问题,请参考以下文章