Kau*_*hik 6 python import file
如何在执行期间导入Python文件?
我创建了3个文件a.py,b.py并c.py在路径中C:\Users\qksr\Desktop\Samples
这些文件包含如下所示的代码:
a.py
from c import MyGlobals
def func2():
print MyGlobals.x
MyGlobals.x = 2
Run Code Online (Sandbox Code Playgroud)
b.py
import a
from c import MyGlobals
def func1():
MyGlobals.x = 1
if __name__ == "__main__":
print MyGlobals.x
func1()
print MyGlobals.x
a.func2()
print MyGlobals.x
Run Code Online (Sandbox Code Playgroud)
c.py
class MyGlobals(object):
x = 0
Run Code Online (Sandbox Code Playgroud)
当我执行代码b.py时,抛出以下错误:
ImportError: No module named a
Run Code Online (Sandbox Code Playgroud)
我相信我的工作目录是默认的,所有文件a,b,c都是我在samples文件夹中创建的.
如何在Python中导入python文件?
如果你在同一个目录中工作,也就是说,b.py在同一个文件夹中a.py,我无法重现这个问题(并且不知道为什么会出现这个问题),但是如果你发布了os.getcwd()返回的内容会有所帮助b.py.
如果不是这种情况,请在此基础上添加 b.py
import sys
sys.path.append('PATH TO a.py')
Run Code Online (Sandbox Code Playgroud)
或者,如果他们在同一条道路上,
import sys
sys.path.append(os.basename(sys.argv[0])) # It should be there anyway but still..
Run Code Online (Sandbox Code Playgroud)
小智 5
调整PYTHONPATH通常不是一个好主意.
更好的方法是通过添加名为的文件使当前目录的行为类似于模块,该文件__init__.py可以为空.
然后python解释器允许您从该目录导入文件.
不要只是匆匆选择适合您的第一个导入策略,否则当您发现它不符合您的需求时,您将不得不重写代码库.
我开始解释最简单的控制台示例#1,然后转向最专业和最强大的程序示例#5
示例1,使用python解释器导入python模块:
把它放在/home/el/foo/fox.py中:
def what_does_the_fox_say():
print "vixens cry"
Run Code Online (Sandbox Code Playgroud)进入python解释器:
el@apollo:/home/el/foo$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
>>> import fox
>>> fox.what_does_the_fox_say()
vixens cry
>>>
Run Code Online (Sandbox Code Playgroud)
您通过python解释器what_does_the_fox_say()从文件中调用了python函数fox.
选项2,在脚本中使用execfile来执行其他python文件:
把它放在/home/el/foo2/mylib.py中:
def moobar():
print "hi"
Run Code Online (Sandbox Code Playgroud)把它放在/home/el/foo2/main.py中:
execfile("/home/el/foo2/mylib.py")
moobar()
Run Code Online (Sandbox Code Playgroud)运行文件:
el@apollo:/home/el/foo$ python main.py
hi
Run Code Online (Sandbox Code Playgroud)
函数moobar是从mylib.py导入的,并在main.py中可用
选项3,使用...导入...功能:
把它放在/home/el/foo3/chekov.py中:
def question():
print "where are the nuclear wessels?"
Run Code Online (Sandbox Code Playgroud)把它放在/home/el/foo3/main.py中:
from chekov import question
question()
Run Code Online (Sandbox Code Playgroud)像这样运行:
el@apollo:/home/el/foo3$ python main.py
where are the nuclear wessels?
Run Code Online (Sandbox Code Playgroud)
如果您在chekov.py中定义了其他函数,除非您这样做,否则它们将无法使用 import *
选项4,如果riaa.py位于与导入位置不同的文件位置,则导入riaa.py
把它放在/home/el/foo4/bittorrent/riaa.py中:
def watchout_for_riaa_mpaa():
print "there are honeypot kesha songs on bittorrent that log IP " +
"addresses of seeders and leechers. Then comcast records strikes against " +
"that user and thus, the free internet was transmogified into " +
"a pay-per-view cable-tv enslavement device back in the 20th century."
Run Code Online (Sandbox Code Playgroud)把它放在/home/el/foo4/main.py中:
import sys
import os
sys.path.append(os.path.abspath("/home/el/foo4/bittorrent"))
from riaa import *
watchout_for_riaa_mpaa()
Run Code Online (Sandbox Code Playgroud)运行:
el@apollo:/home/el/foo4$ python main.py
there are honeypot kesha songs on bittorrent...
Run Code Online (Sandbox Code Playgroud)
从不同的目录导入外部文件中的所有内容.
选项5,使用裸导入命令在python中导入文件:
/home/el/foo5//home/el/foo5/herp创建一个以__init__.pyherp 命名的空文件:
el@apollo:/home/el/foo5/herp$ touch __init__.py
el@apollo:/home/el/foo5/herp$ ls
__init__.py
Run Code Online (Sandbox Code Playgroud)创建一个新目录/ home/el/foo5/herp/derp
在derp下,制作另一个__init__.py文件:
el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
el@apollo:/home/el/foo5/herp/derp$ ls
__init__.py
Run Code Online (Sandbox Code Playgroud)在/ home/el/foo5/herp/derp下面创建一个名为yolo.pyPut this 的新文件:
def skycake():
print "SkyCake evolves to stay just beyond the cognitive reach of " +
"the bulk of men. SKYCAKE!!"
Run Code Online (Sandbox Code Playgroud)真实的时刻,制作新文件/home/el/foo5/main.py,把它放在那里;
from herp.derp.yolo import skycake
skycake()
Run Code Online (Sandbox Code Playgroud)运行:
el@apollo:/home/el/foo5$ python main.py
SkyCake evolves to stay just beyond the cognitive reach of the bulk
of men. SKYCAKE!!
Run Code Online (Sandbox Code Playgroud)
空__init__.py文件与python解释器通信,开发人员希望此目录是可导入的包.
如果您想查看有关如何在目录下包含所有.py文件的帖子,请参阅此处:https://stackoverflow.com/a/20753073/445131
Bonus protip,无论您使用的是Mac,Linux还是Windows,都需要使用python的空闲编辑器,如此处所述.它将解锁你的python世界. http://www.youtube.com/watch?v=DkW5CSZ_VII