我试图导入我在python中编写的模块,该模块只打印出包含数字的列表。我遇到的问题是我希望能够从一个单独的目录中导入它,但到目前为止我读过的答案似乎并不适用于我的情况。
例如,鉴于我想从document文件夹中的目录导入printnumbers.py,我应该实现以下内容:
import sys
sys.path.append('/home/jake/Documents')
import printnumbers.py
这段代码会导致"导入错误"告诉我指定的模块不存在。我不确定从哪里开始,我已多次检查以确保它是路径和模块名称的正确拼写。我仍然试图准确理解附加到" sys.path"确实。根据我的理解,它告诉程序在该目录中搜索模块?
感谢所有回答我的新手问题的人。我只是想更好地理解python文档并没有提供我的思维框架。
答案 0 :(得分:8)
当文件为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导入它,前提是前面printnumbers.py
中列出的目录中没有其他名为sys.path
的文件/home/jake/Documents/
。
请注意,将目录注入sys.path
并不是设置Python搜索模块的常用方法。通常最好将/home/jake/Documents
添加到PYTHONPATH环境变量中。 sys.path
将自动包含PYTHONPATH环境变量中列出的目录。
答案 1 :(得分:2)
还有一件事,在你的目录中使用一个空的 __ init __。py 文件 使它成为一个python包(只有Python才会知道这一点 directory是一个普通的Python包目录 目录)。因此,您可以从该包导入模块 不同的目录。