我正在尝试将我的脚本分成几个带有函数的文件,因此我将一些函数移动到单独的文件中,并希望将它们导入到一个主文件中。结构是:
core/
main.py
posts_run.py
posts_run.py
有两个功能get_all_posts
和retrieve_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。
如何导入此功能?
答案 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进入目录并启动我的程序。这允许对主机零影响