如何从同一文件夹中的模块导入函数?

Ole*_*siy 9 python python-3.x

我试图将我的脚本分成几个带有函数的文件,因此我将一些函数移动到单独的文件中,并希望将它们导入到一个主文件中.结构是:

core/
  main.py
  posts_run.py
Run Code Online (Sandbox Code Playgroud)

posts_run.py有两个功能,get_all_posts并且retrieve_posts,所以我尝试导入get_all_posts具有:

from posts_run import get_all_posts
Run Code Online (Sandbox Code Playgroud)

Python 3.5给出了错误:

ImportError: cannot import name 'get_all_posts'
Run Code Online (Sandbox Code Playgroud)

Main.py包含以下代码行:

import vk
from configs import client_id, login, password
session = vk.AuthSession(scope='wall,friends,photos,status,groups,offline,messages',   app_id=client_id, user_login=login,
                     user_password=password)
api = vk.API(session)
Run Code Online (Sandbox Code Playgroud)

然后我需要将api导入函数,所以我有能力获得对vk的API调用.

完整堆栈跟踪

Traceback (most recent call last):
  File "E:/gited/vkscrap/core/main.py", line 26, in <module>
    from posts_run import get_all_posts
  File "E:\gited\vkscrap\core\posts_run.py", line 7, in <module>
    from main import api, absolute_url, fullname
  File "E:\gited\vkscrap\core\main.py", line 26, in <module>
    from posts_run import get_all_posts
ImportError: cannot import name 'get_all_posts'
Run Code Online (Sandbox Code Playgroud)

api - 是一个api = vk.API(session)在main.py. absolute_url和fullname也存储在main.py中.我在Windows 7上使用PyCharm 2016.1,在virtualenv中使用Python 3.5 x64.如何导入此功能?

Sar*_*iev 10

您需要添加__init__.py核心文件夹.您收到此错误是因为python无法将您的文件夹识别为python包

之后呢

from .posts_run import get_all_posts
#    ^ here do relative import
# or
from core.posts_run import get_all_posts
# because your package named 'core' and importing looks in root folder
Run Code Online (Sandbox Code Playgroud)

  • 我这样做了,也没有效果。Python 引发同样的错误 (2认同)

Dan*_* M. 5

MyFile.py:

def myfunc():
    return 12
Run Code Online (Sandbox Code Playgroud)

启动python解释器:

>>> from MyFile import myFunc
>>> myFunc()
12
Run Code Online (Sandbox Code Playgroud)

或者:

>>> import MyFile
>>> MyFile.myFunc()
12
Run Code Online (Sandbox Code Playgroud)

这在您的计算机上不起作用吗?