从目录导入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中的用户定义模块的主要内容,如果未能解决你的问题,请参考以下文章

在pycharm中导入自定义模块

对如何从模块中的其他目录/父目录导入感到困惑(python 3)

如何从 Python 中的子文件夹导入模块或文件?

您可以从 github 存储库中的另一个目录导入 python 模块吗? [复制]

从boost python模块中的pyside导入类?

如何从python中的测试模块导入src