How to import a function from a module in the same folder?
我试图用函数将我的脚本分成几个文件,所以我将一些函数移到了单独的文件中,并希望将它们导入到一个主文件中。结构为:
1 2 3 | core/ main.py posts_run.py |
1 | from posts_run import get_all_posts |
python 3.5给出了错误:
1 | ImportError: cannot import name 'get_all_posts' |
main.py包含以下代码行:
1 2 3 4 5 | 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调用。
全堆栈跟踪
1 2 3 4 5 6 7 8 | 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中的
您需要在核心文件夹中添加
之后做
1 2 3 4 5 | 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 |
从这个问题中可以找到一个作弊的解决方案(问题是为什么使用sys.path.append(path)而不是sys.path.insert(1,path)?.基本上你做以下的
1 2 3 | import sys sys.path.insert(1, directory_path_your_code_is_in) import file_name_without_dot_py_at_end |
当你在pycharm 2016.1中运行它时,它可能在与你期望的不同的当前目录中…
MyFile.py:
1 2 | def myfunc(): return 12 |
启动python解释器:
1 2 3 | >>> from MyFile import myFunc >>> myFunc() 12 |
可选地:
1 2 3 | >>> import MyFile >>> MyFile.myFunc() 12 |
这对你的机器不起作用吗?
python找不到要导入的模块,因为它是从另一个目录执行的。
打开一个终端和CD到脚本的文件夹中,然后从那里执行python。
在脚本中运行此代码以从执行python的位置打印:
1 2 | import os print(os.getcwd()) |
编辑:这是我的意思的证明
把上面的代码放在位于
打开终端和类型
1 | python3 C:\folder\test.py |
这将输出python可执行文件的基目录
现在类型
1 2 | cd C:\folder python3 test.py |
这将输出
我通常将bash/batch脚本写入cd目录并启动程序。这使得对主机没有影响