指示 Python 在另一个文件夹中查找模块

Posted

技术标签:

【中文标题】指示 Python 在另一个文件夹中查找模块【英文标题】:Directing Python to look in another folder for modules 【发布时间】:2017-04-20 08:31:36 【问题描述】:

我对 python 还是很陌生,所以如果这是非常简单或非常错误的思考方式,请原谅我。

我已经安装了 python 2.7。根据我在运行以下代码时的理解,它列出了查找模块的目录。

Python 2.7.12 (default, Oct 11 2016, 14:42:58) 
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print '\n'.join(sys.path)

/usr/local/lib/python2.7/site-packages
/usr/lib/python2.7/site-packages
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/readline
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

我有另一个目录,其中似乎安装了一堆 python 模块。 "/Library/Python/2.7/site-packages"

我想我需要做以下两件事之一:

(1) 直接 python 在这个附加文件夹中查找模块。 我该怎么做?

(2) 将模块安装在它已经指向的文件夹之一中。我一直在使用 pip 安装模块,我认为 pip 正在安装到这个额外的导演。 如何检查 pip 是否安装到此文件夹?如何更改 pip 安装包的位置?

谢谢!

【问题讨论】:

一个快速的解决方法是在你的代码中将目录附加到sys.path,例如sys.path.append('/Library/Python/2.7/site-packages')。这应该在依赖此目录的imports 之前完成。 要查看使用 pip 安装的任何给定库的位置,请使用 pip show 命令:C:\Users\...>pip show numpy 查找行 location: 谢谢,@jmd_dk,这对我有用!谢谢。有什么方法可以告诉它永久引用这个目录,而不必放入我的代码? @user1500158 将其添加到system PYTHONPATH variable 【参考方案1】:

这些东西是由site.py 设置的。你可以通过输入解释器找出哪个site.py

python -v

或者,在交互式解释器中导入site 并检查site.__file__ 属性。

site.py 中还有一个有用的脚本,您可以使用它运行

python -m site

你想在输出中看到的是你的用户站点,比如

USER_BASE: '/home/<your_username>/.local' (exists)
USER_SITE: '/home/<your_username>/.local/lib/python2.7/site-packages' (exists)
ENABLE_USER_SITE: True

当你pip install 一个包时,使用pip install --user,它会将模块安装到你的用户空间。 不要使用 sudo pip install 安装东西。 不要像 jmd_dk 建议的“快速修复”那样手动修改 sys.path正确行事。

如果在阅读了site documentation 和PEP370 之后,您仍然无法正确设置用户站点,那么可以在您的 bash 配置文件中添加这样的一行:

export PYTHONPATH=/home/<your_username>/.local/lib/python2.7/site-packages

如果您同时安装了 Python 3 和 Python 2,请注意 PYTHONPATH 环境变量将被两个解释器看到。在这种情况下,强烈建议为每个解释器(或使用虚拟环境)单独启用site.USER_SITE,以便为已安装的包提供足够的命名空间。

【讨论】:

感谢您的信息。我不知道将 sudo 添加到那行代码的前面“将模块放在错误的位置”。我的想法正确吗? 是的,你想错了。您应该使用您的用户帐户而不是 root 帐户安装 python 模块。而且jmd_dk评论是有害的,如果我是版主我会删除它。

以上是关于指示 Python 在另一个文件夹中查找模块的主要内容,如果未能解决你的问题,请参考以下文章

Python引用模块和查找模块路径

在另一个声音文件中查找一个声音文件

Python的模块引用和查找路径

Python入门之Python引用模块和查找模块路径

python模块和包

python 基础 模块