如何在同一目录或子目录中导入该类?

时间:2010-11-10 07:32:24

标签: python python-import

我有一个存储所有 .py 文件的目录。

bin/
   main.py
   user.py # where class User resides
   dir.py # where class Dir resides

我想在 main.py 中使用 user.py dir.py 中的类。
如何将这些Python类导入 main.py
此外,如果 user.py 位于子目录中,如何导入课程User

bin/
    dir.py
    main.py
    usr/
        user.py

17 个答案:

答案 0 :(得分:722)

Python 2

在与文件相同的目录中创建一个名为__init__.py的空文件。这将表明Python“可以从这个目录导入”。

然后就这样做......

from user import User
from dir import Dir

如果文件位于子目录中,也是如此 - 将__init__.py放在子目录中,然后使用带有点表示法的常规import语句。对于每个级别的目录,您需要添加到导入路径。

bin/
    main.py
    classes/
        user.py
        dir.py

因此,如果目录名为“classes”,那么你可以这样做:

from classes.user import User
from classes.dir import Dir

Python 3

与上一个相同,但如果不使用子目录,则在模块名称前加上.

from .user import User
from .dir import Dir

答案 1 :(得分:111)

我刚学会了(感谢martineau's comment),为了从同一目录中的文件导入类,你现在可以用Python 3编写:

from .user import User
from .dir import Dir

答案 2 :(得分:31)

main.py

from user import Class

其中Class是您要导入的类的名称。

如果您想调用Class的方法,可以使用以下方法调用:

Class.method

请注意,同一目录中应该有一个空的__init__.py文件。

答案 3 :(得分:10)

如果您不想将功能和课程与您的课程混合,您可以导入该模块并通过其名称进行访问

import util # imports util.py

util.clean()
util.setup(4)

或者您可以将函数和类导入代码

from util import clean, setup
clean()
setup(4)

您可以使用wildchar *将该模块中的所有内容导入您的代码

from util import *
clean()
setup(4)

答案 4 :(得分:8)

让它更容易理解:

步骤1:让我们转到一个目录,其中包含所有目录

$ cd /var/tmp

步骤2:现在让我们创建一个class1.py文件,其类名为Class1,代码为

$ cat > class1.py <<\EOF
class Class1:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class1 OK]: " + ENDC
EOF

步骤3:现在让我们创建一个class2.py文件,其类名为Class2,带有一些代码

$ cat > class2.py <<\EOF
class Class2:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class2 OK]: " + ENDC
EOF

步骤4:现在让一个main.py执行一次,使用来自2个不同文件的Class1和Class2

$ cat > main.py <<\EOF
"""this is how we are actually calling class1.py and  from that file loading Class1"""
from class1 import Class1 
"""this is how we are actually calling class2.py and  from that file loading Class2"""
from class2 import Class2

print Class1.OK
print Class2.OK
EOF

第5步:运行程序

$ python main.py

输出为

[Class1 OK]: 
[Class2 OK]:

答案 5 :(得分:4)

from user import User 
from dir import Dir 

答案 6 :(得分:4)

Python 3


相同的directory

导入文件:log.py

导入类:SampleApp()

import log
if __name__ == "__main__":
    app = log.SampleApp()
    app.mainloop()

目录为basic

导入文件:log.py

导入类:SampleApp()

from basic import log
if __name__ == "__main__":
    app = log.SampleApp()
    app.mainloop()

答案 7 :(得分:4)

我不确定为什么可以使用Pycharm build function showMySideBar() { var html='<input type="button" value="Click Me" onClick="doSomething()" />'; html+='<script>function doSomething(){google.script.run.withSuccessHandler(function(msg){window.alert(msg);}).pleaseHelp();}</script>'; SpreadsheetApp.getUi().showSidebar(HtmlService.createHtmlOutput(html)); } function pleaseHelp() { return 'What can I do to help?'; }

IDE对此有所抱怨,但似乎仍然可以使用。我正在使用Python 3.7

答案 8 :(得分:2)

如果user.py和dir.py不包含类,则

from .user import User
from .dir import Dir

不起作用。然后,您应导入为

from . import user
from . import dir

答案 9 :(得分:0)

对于 Python 3+,假设您具有以下结构:

A/
  __init__.py
  bar.py
  foo.py

在您的 __init__.py 文件中,您可以将 from . import foo

然后你可以在bar文件中导入foo

# A/bar.py
from foo import YourClass

__init__.py 文件的目的是包含可选的初始化代码,这些代码在遇到不同级别的包时运行。您放入 __init__.py 的所有内容都将在程序包加载期间进行初始化。

答案 10 :(得分:0)

        var channel = pusher.subscribe('question-channel');
        channel.bind('question-event', function (data) {

            if({{\App\Models\UserAreas::where('user_id','=',Auth::id())->where('area_id','=',data.area)}})
                var n = new Notification(data.title, {
                    icon: 'img/icon.png',
                    body: data.content,
                    image:'img/1.jpg'
                });

                n.onclick = function(e) {
                    e.preventDefault(); // prevent the browser from focusing the Notification's tab
                    window.open('http://127.0.0.1:8000/');
                }

        });

答案 11 :(得分:0)

如果您在同一个文件夹中有 filename.py,您可以像这样轻松导入:

import filename

我使用的是python3.7

答案 12 :(得分:0)

对于python3

从同级导入:from .user import User
从侄子导入:from .usr.user import User

答案 13 :(得分:0)

在python3中,__init__.pyno longer necessary。如果控制台的当前目录是python脚本所在的目录,则

一切正常
import user

但是,如果从不包含user.py的其他目录中调用此方法将不起作用。
在这种情况下,请使用

from . import user

即使您要导入整个文件而不是仅从那里导入一个类,此方法也可以使用。

答案 14 :(得分:0)

太简短了, 创建文件__init__.py是classes目录,然后将其导入到脚本中,如下所示

from classes.myscript import *

答案 15 :(得分:-1)

Python3

使用

from .user import User inside dir.py file

use from class.dir import Dir inside main.py
or from class.usr import User inside main.py

像这样

答案 16 :(得分:-1)

要从同一目录导入

from . import the_file_you_want_to_import 

要从子目录导入目录应包含的内容

  

初始化 .py

然后将文件以外的文件

从目录导入your_file