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

时间:2016-08-30 16:52:51

标签: python python-3.x

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

core/
  main.py
  posts_run.py

posts_run.py有两个功能get_all_postsretrieve_posts,因此我尝试导入get_all_posts

from posts_run import get_all_posts

Python 3.5给出错误:

ImportError: cannot import name 'get_all_posts'

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)

然后我需要将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'

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

4 个答案:

答案 0 :(得分:8)

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

之后呢

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

答案 1 :(得分:1)

MyFile.py:

def myfunc():
    return 12

启动python interpreter:

>>> from MyFile import myFunc
>>> myFunc()
12

或者:

>>> import MyFile
>>> MyFile.myFunc()
12

这不适用于您的机器吗?

答案 2 :(得分:1)

可以从这个问题找到作弊解决方案(问题是Why use sys.path.append(path) instead of sys.path.insert(1, path)?)。基本上你做了以下

    import sys
    sys.path.insert(1, directory_path_your_code_is_in)
    import file_name_without_dot_py_at_end

当你在PyCharm 2016.1中运行它时,这将会得到回合,它可能与你期望的不同的当前目录......

答案 3 :(得分:0)

Python没有找到要导入的模块,因为它是从另一个目录执行的。

打开终端并进入脚本文件夹,然后从那里执行python。

在脚本中运行此代码,以便从以下位置打印python:

import os
print(os.getcwd())

编辑: 这是我的意思的证明

将上面的代码放在位于test.py

C:\folder\test.py文件中

打开终端并输入

python3 C:\folder\test.py

这将输出python可执行文件的基本目录

现在输入

cd C:\folder
python3 test.py

这将输出C:\folder\。因此,如果您在folder中有其他模块导入它们应该不是问题

我经常写一个bash / batch脚本来cd进入目录并启动我的程序。这允许对主机零影响