首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从同一文件夹下的模块导入函数?

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

Stack Overflow用户
提问于 2016-08-31 00:52:51
回答 4查看 34.7K关注 0票数 18

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

代码语言:javascript
复制
core/
  main.py
  posts_run.py

posts_run.py有两个函数,get_all_postsretrieve_posts,因此我尝试使用以下命令导入get_all_posts

代码语言:javascript
复制
from posts_run import get_all_posts

Python 3.5给出了以下错误:

代码语言:javascript
复制
ImportError: cannot import name 'get_all_posts'

Main.py包含以下代码行:

代码语言:javascript
复制
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)

然后我需要将api导入到函数中,这样我就能够获得对vk的API调用。

全栈跟踪

代码语言:javascript
复制
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'

api -是main.py中的api = vk.API(session)。全名和全名也存储在main.py中。我在Windows7上使用PyCharm 2016.1,在virtualenv中使用Python3.5 x64。如何导入此函数?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-31 00:58:02

您需要在核心文件夹中添加__init__.py。出现此错误是因为python无法将您的文件夹识别为python package

在那之后做

代码语言:javascript
复制
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
票数 19
EN

Stack Overflow用户

发布于 2016-08-31 01:00:39

MyFile.py:

代码语言:javascript
复制
def myfunc():
    return 12

启动python解释器:

代码语言:javascript
复制
>>> from MyFile import myFunc
>>> myFunc()
12

或者:

代码语言:javascript
复制
>>> import MyFile
>>> MyFile.myFunc()
12

这在你的机器上不起作用吗?

票数 7
EN

Stack Overflow用户

发布于 2016-08-31 01:19:19

可以从这个问题中找到作弊的解决方案(问题是Why use sys.path.append(path) instead of sys.path.insert(1, path)? )。从本质上讲,您可以执行以下操作

代码语言:javascript
复制
    import sys
    sys.path.insert(1, directory_path_your_code_is_in)
    import file_name_without_dot_py_at_end

这将解决当你在PyCharm 2016.1中运行它时,它可能在不同的当前目录中,而不是你所期望的……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39233077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档