从目录导入python中的用户定义模块
Posted
技术标签:
【中文标题】从目录导入python中的用户定义模块【英文标题】:Importing user defined modules in python from a directory 【发布时间】:2016-09-27 17:56:01 【问题描述】:我正在尝试导入我在 python 中编写的一个模块,它只打印出一个包含数字的列表。我遇到的问题是我希望能够从单独的目录中导入它,但到目前为止我阅读的答案似乎不适用于我的情况。
例如,假设我想从我的文档文件夹中的目录导入 printnumbers.py,我应该实现以下内容:
import sys
sys.path.append('/home/jake/Documents')
import printnumbers.py
这段代码导致“导入错误”,告诉我指定的模块不存在。我不确定从哪里开始,我已经检查了多次以确保路径和模块名称的拼写正确。我仍在尝试准确了解附加到“sys.path”的作用。据我了解,它告诉程序在该目录中搜索模块?
感谢任何回答我这个新手问题的人。我只是想更好地理解 python 文档没有为我提供的思路。
【问题讨论】:
【参考方案1】:当文件为printnumbers.py
时,模块称为printnumbers
(不带.py
)。因此使用
import printnumbers
import sys
sys.path.append('/home/jake/Documents')
将'/home/jake/Documents'
附加到sys.path
的末尾。每当 import 语句导致 Python 搜索模块时,就会搜索 sys.path
中列出的目录(按列出的顺序)。 (已经导入的模块缓存在sys.modules
,所以Python并不总是需要搜索sys.path
目录来导入模块...)
因此,如果您有一个文件 /home/jake/Documents/printnumbers.py
,那么 import printnumbers
将导致 Python 导入它,前提是在 /home/jake/Documents/
之前的 sys.path
中列出的目录中没有其他名为 printnumbers.py
的文件。
请注意,将目录注入sys.path
并不是设置 Python 搜索模块的常用方法。通常最好将/home/jake/Documents
添加到您的 PYTHONPATH 环境变量中。 sys.path
将自动包含 PYTHONPATH 环境变量中列出的目录。
【讨论】:
男孩,我觉得自己像个彻头彻尾的傻瓜,我可以发誓我在查看的示例末尾看到了“.py”扩展名。刚刚测试了您的解决方案,它现在运行良好。非常感谢您的帮助。 这很有意义。为什么添加扩展时导入失败?我现在有点好奇。这是否意味着我可以有一个没有类型作为 python 模块导入的文件? 不,您不能将 .txt 或 .jpg 作为 python 模块导入。后台的 Python 将确定当前目录中的模块名称是否为 .py 类型并相应地导入它。尝试导入其他任何内容都会引发导入错误。 @Ragecoder:模块可能以platform-dependent结尾的后缀。除了.py
,模块(至少在某些平台上)可能以.pyc
,或.pyw
或.so
,.pyd
, .pyo
或.dll
结尾。【参考方案2】:
还有一件事,在你的目录中使用一个空的 __ init __.py 文件 使它成为一个 python 包(只有这样 Python 才会知道这个 directory 是一个 Python 包目录,而不是普通的 目录)。因此,您可以从该包中导入模块 不同的目录。
【讨论】:
以上是关于从目录导入python中的用户定义模块的主要内容,如果未能解决你的问题,请参考以下文章
对如何从模块中的其他目录/父目录导入感到困惑(python 3)