在不使用sys.path.append或sys.path.insert的情况下从目录导入文件

时间:2013-10-18 15:51:54

标签: python python-3.x

在Python中, 如果我想从不同的目录导入文件,那么我应该这样做,

import sys
sys.path.append("/path")

现在,

我有两个要导入的文件,

File1.py and File2.py,

这些是文件的位置,

MyFiles/File1.py
MyFiles/File2.py

现在,如果我要导入这两个文件,我会这样做

from MyFiles import File1
from MyFiles import File2

这不应该起作用,因为我没有使用sys.path

定义这些文件的路径

但是当我运行我的代码时,文件导入成功,而没有使用sys.path

定义路径

这是代码,

from __future__ import print_function

import sys
import os
import hashlib
import struct #Interpret strings as packed binary data
import getopt #for Runtime arguments

from MyFiles import File1
from MyFiles import File2

尽管我还没有定义sys.path,但这段代码仍然可以从目录中成功导入文件。

并且sys.path

中的路径尚未提供
['C:\\Users\\Sufiyan\\Desktop\\MyFolder', 'C:\\Windows\\SYSTEM32\\python33.zip', 'C:\
\Python33\\DLLs', 'C:\\Python33\\lib', 'C:\\Python33', 'C:\\Python33\\lib\\site-
packages']

很明显,路径, C:\\Users\\Sufiyan\\Desktop\\MyFolder\\MyFiles不存在。

然后为什么这段代码有效?

2 个答案:

答案 0 :(得分:1)

该路径不存在,但父路径'C:\\Users\\Sufiyan\\Desktop\\MyFolder'是。当你做的时候

from MyFiles import File1

它会尝试将模块的路径附加到现有路径,因此它将采用上述路径,向其添加“MyFiles”,并尝试从该模块导入File1(文件或来自{ MyFiles目录中的{1}}。

您可以将模块路径视为与文件路径非常相似。如果它作为sys.path中任何东西下的子目录存在,那就是它将获得它的地方。

答案 1 :(得分:0)

他们所居住的文件夹可能已经在您的路径中了。您可以通过执行以下操作进行检查:

import sys

sys.path

试一试。