2016-05-30 73 views
2

我想导入一个模块,我用python写出了一个只打印出包含数字的列表。我遇到的问题是我希望能够从一个单独的目录中导入它,但迄今为止我阅读的答案似乎不适合我的情况。从目录中导入用户定义的模块在Python中

例如,假设我想从我的文档文件夹的目录中我应该导入printnumbers.py实现以下:

import sys 
    sys.path.append('/home/jake/Documents') 
    import printnumbers.py 

的代码导致该snipit在“导入错误”告诉​​我指定的模块不存在。我不确定从哪里开始,我已经多次检查过,以确保它是正确的路径拼写以及模块名称。我仍然试图了解到什么附加到“sys.path”。据我所知,它告诉程序在该目录中搜索模块?

感谢任何回答我的新手问题的人。我只是在寻找更好的理解,python文档没有提供我的思维框架。

回答

7

当文件为printnumbers.py时,该模块被称为printnumbers(没有.py)。因此使用

import printnumbers 

import sys 
sys.path.append('/home/jake/Documents') 

追加'/home/jake/Documents'到的sys.path结束。只要导入语句导致Python搜索模块,就会搜索sys.path中列出的目录(按所列顺序)。 (已导入模块在sys.modules缓存,所以Python并不总是需要寻找sys.path目录导入模块...)

所以,如果你有一个文件/home/jake/Documents/printnumbers.py,然后import printnumbers会导致Python来导入它提供有在sys.path中列出的目录中没有其他名称为printnumbers.py的文件,其前/home/jake/Documents/

请注意,将目录注入到sys.path不是设置Python搜索模块的常用方法。通常最好将/home/jake/Documents添加到您的PYTHONPATH环境变量中。 sys.path将自动包含PYTHONPATH环境变量中列出的目录。

+0

男孩我觉得自己像一个完整的笨蛋我可以发誓我看到了“.py”扩展名结尾的一个例子,我正在看。刚刚测试过您的解决方案,现在它出色地工作。非常感谢你的帮助。 – Ragecoder

+0

现在有很大的意义。为什么添加扩展时导入失败?我现在有点好奇。这是否意味着我可以有一个没有导入为python模块的文件? – Ragecoder

+0

不,您不能将.txt或.jpg导入为python模块。后台Python将确定当前目录中的模块名称是否为.py,并相应地导入它。试图导入其他任何东西都会引发导入错误。 – TheLazyScripter

1

还有一两件事,用一个空__初始化__.py文件在你的目录 ,使其作为一个Python包(只有Python会知道这 目录以外的Python包目录一个普通的 目录)。因此,您可以从 不同的目录中导入该软件包中的模块。