怎么把文件导入python_如何导入其他Python文件?

本文详细介绍了Python中导入模块的七种方法,包括直接使用`import`,`execfile`,`from...import`,修改`sys.path`,`os.system`,启动钩子以及创建包结构。每种方法都有其适用场景,理解这些方法有助于优化代码组织和提高代码可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小编典典

导入python文件的方法有很多,各有利弊。

不要只是匆忙地选择适合您的第一个导入策略,否则稍后您将在发现不符合您的需求时重写代码库。

我将首先说明最简单的示例#1,然后将介绍最专业,最可靠的示例#7

示例1,使用python解释器导入python模块:

将其放在/home/el/foo/fox.py中:

def what_does_the_fox_say():

print("vixens cry")

进入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

>>>

您通过python解释器导入了fox,并what_does_the_fox_say()从fox.py中调用了python函数。

示例2,在脚本中使用execfile或(exec在Python 3中)在适当的位置执行另一个python文件:

将其放在/home/el/foo2/mylib.py中:

def moobar():

print("hi")

将其放在/home/el/foo2/main.py中:

execfile("/home/el/foo2/mylib.py")

moobar()

运行文件:

el@apollo:/home/el/foo$ python main.py

hi

功能moobar是从mylib.py导入的,并在main.py中可用

示例3,从…使用…导入…功能:

将其放在/home/el/foo3/chekov.py中:

def question():

print "where are the nuclear wessels?"

将其放在/home/el/foo3/main.py中:

from chekov import question

question()

像这样运行它:

el@apollo:/home/el/foo3$ python main.py

where are the nuclear wessels?

如果您在chekov.py中定义了其他函数,那么除非您使用它们,否则它们将不可用 import *

示例4,如果导入的riaa.py与导入的文件位于不同的位置,请导入

将其放在/home/el/foo4/stuff/riaa.py中:

def watchout():

print "computers are transforming into a noose and a yoke for humans"

将其放在/home/el/foo4/main.py中:

import sys

import os

sys.path.append(os.path.abspath("/home/el/foo4/stuff"))

from riaa import *

watchout()

运行:

el@apollo:/home/el/foo4$ python main.py

computers are transforming into a noose and a yoke for humans

那会从另一个目录导入外部文件中的所有内容。

示例5,使用 os.system(“python yourfile.py”)

import os

os.system("python yourfile.py")

示例6,通过piggy带python startuphook导入文件:

更新:此示例曾经同时适用于python2和3,但现在仅适用于python2。python3摆脱了此用户启动钩子功能集,因为它被低技能的python库编写者滥用,使用它在所有用户定义的程序之前不礼貌地将其代码注入到全局名称空间中。如果您希望此功能适用于python3,则必须变得更有创意。如果我告诉您如何做,python开发人员也会禁用该功能集,因此您是一个人。

参见:https : //docs.python.org/2/library/user.html

将此代码放入您的主目录中 ~/.pythonrc.py

class secretclass:

def secretmessage(cls, myarg):

return myarg + " is if.. up in the sky, the sky"

secretmessage = classmethod( secretmessage )

def skycake(cls):

return "cookie and sky pie people can't go up and "

skycake = classmethod( skycake )

将此代码放入您的main.py(可以在任何地方):

import user

msg = "The only way skycake tates good"

msg = user.secretclass.secretmessage(msg)

msg += user.secretclass.skycake()

print(msg + " have the sky pie! SKYCAKE!")

运行它,您应该获得以下信息:

$ python main.py

The only way skycake tates good is if.. up in the sky,

the skycookie and sky pie people can't go up and have the sky pie!

SKYCAKE!

如果您在此处遇到错误:ModuleNotFoundError: No module named 'user'这意味着您使用的是python3,默认情况下会禁用启动钩。

值得一提的是:https : //github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py随便 发送。

示例7,最健壮:使用裸导入命令在python中导入文件:

建立一个新目录 /home/el/foo5/

建立一个新目录 /home/el/foo5/herp

制作一个__init__.py在herp下命名的空文件:

el@apollo:/home/el/foo5/herp$ touch __init__.py

el@apollo:/home/el/foo5/herp$ ls

__init__.py

新建一个目录/ 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

在/ 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!!"

关键时刻,创建新文件/home/el/foo5/main.py,并将其放入其中;

from herp.derp.yolo import skycake

skycake()

运行:

el@apollo:/home/el/foo5$ python main.py

SkyCake evolves to stay just beyond the cognitive reach of the bulk

of men. SKYCAKE!!

空__init__.py文件会通知python解释器开发人员打算将此目录作为可导入包。

2020-02-11

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值