【问题标题】: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 权限。

标签: python python-module pythonpath


【解决方案1】:

阅读您的问题,我明白了

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

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

  1. 确保您包含的此文件夹位于sys.path 的末尾。这将确保您已经导入的任何模块(如果存在于新包含的文件夹中)永远不会从该特定位置导入。
  2. (仅适用于 *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)。另见:

【讨论】:

  • 我实际上是指可以导入,而不是实际导入。例如,我在 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

【讨论】:

    猜你喜欢
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多