2013-03-06 84 views
36

我到处都看到使用import sysimport mymodule如果import语句只包含文件名,python如何找到模块文件?

Python代码导入模块如何解释找到正确的文件,如果不提供目录或路径?

+12

型'的帮助(“进口”)'在控制台和享受什么。 – DSM 2013-03-06 15:58:54

+1

http://effbot.org/zone/import-confusion.htm – Hoopdady 2013-03-06 15:59:28

+0

['import' statement](http://docs.python.org/2/reference/simple_stmts.html#the-import-statement) – jfs 2013-03-06 16:02:13

回答

39

http://docs.python.org/3/tutorial/modules.html#the-module-search-path

6.1.2。模块搜索路径

当导入名为spam的模块时,解释器首先搜索具有该名称的内置模块。如果未找到,则它将在变量sys.path给出的目录列表中搜索名为spam.py的文件。 sys.path从这些位置初始化:

  • 包含输入脚本(或未指定文件时的当前目录)的目录。
  • PYTHONPATH(目录名称列表,其语法与shell变量PATH相同)。
  • 安装相关的默认值。

注:在支持符号链接的文件系统,符号链接后面之后计算包含输入脚本的目录。换句话说,包含符号链接的目录不会被添加到模块搜索路径中。

初始化后,Python程序可以修改sys.path。包含正在运行的脚本的目录放置在搜索路径的开头,位于标准库路径之前。这意味着该目录中的脚本将被加载,而不是库目录中相同名称的模块。除非要进行替换,否则这是错误的。更多信息请参见标准模块部分。

有关“特定于安装的默认设置”的信息,请参阅关于the site module的文档。

0

Python有一个路径变量,就像你在终端里面有一个变量。 Python会在该路径内的文件夹或程序所在的文件夹中查找模块。

5

它使用PYTHONPATH,设置为环境变量,以找到(含有__init__.py文件的文件夹)包和模块(或者,如果已经加载一次,从sys.modules检索模块对象)。

+0

谢谢!顺便说一下,原则上允许使用绝对路径还是相对路径?我会在10分钟内接受 – Asciiom 2013-03-06 15:59:57

+0

您可以使用,但一般而言,为了清晰的代码,绝对是首选。 – 2013-03-06 17:15:02

17

此外,你可以看到当前的路径是通过使用sys模块

import sys 
print sys.path 
相关问题