【问题标题】:Correct syntax for import statementimport 语句的正确语法
【发布时间】:2019-11-26 21:05:19
【问题描述】:

这里是新手

我想从另一个目录的文件中导入一个类,在这种情况下: C:\Users\jose_\Desktop\my_ref\stack_class.py,使用 from - import 语句。我在上述目录中有一个 init.py 文件,但在任何地方都找不到正确的 sintax。

C:\Users\jose_\Desktop\my_ref\stack_class.py 怎么放在导入部分?

我尝试过使用其他两种方式:

exec(open("file path on windows").read())

以及导入 sys 和 sys.path.insert

他们都工作,试图用 import 语句来做。

from C:\Users\jose_\Desktop\my_ref\stack_class.py import Stack #Error here
foo = Stack()

print(type(foo))

错误

  File "C:/Users/jose_/OneDrive/Mis_Documentos/Educacion/Linkedin/Ex_Files_Python_Data_Structures_Queues/Exercise_Files/Ch02/02_02/End/main2.py", line 4
    from C:\Users\jose_\Desktop\my_ref\stack_class.py import Stack
          ^
SyntaxError: invalid syntax

【问题讨论】:

标签: python python-3.x windows directory python-import


【解决方案1】:

据我所知,您无法从 Python 中的文件路径导入。 您只能通过传递模块名称来导入:

import module.submodule
# then
module.submodule.sth()

from module.submodule import sth
# then
sth()

Python 会在sys.path 的所有目录中搜索module/submodule.pymodule/submodule/__init_.py

因此,如果您想从您自己创建的另一个目录中的文件导入(不包含在sys.path 列表中),您必须将该目录附加到列表中,以告诉 Python 在哪里可以找到该模块。尝试运行:

import sys
sys.path.append('C:\\Users\\jose_\\Desktop\\my_ref')
from stack_class import Stack
# then
foo = Stack()
print(type(foo))

编辑

如果你不想追加到sys.path,你需要将你的模块移动到sys.path中的目录之一,例如当前目录.也在sys.path中,或者Python不知道模块在哪里(C:\ 不在sys.path 中)。 Python 从不从sys.path 中未包含的目录导入(我的意思是通过import 语句)!

【讨论】:

  • sys.path.append 不会将其永久添加到路径中。每次要导入包时都必须这样做... sys.path.extend 是永久的, 你只做一次
  • @DerekEden append (<method 'append' of 'list' objects>) 和 extend (<method 'extend' of 'list' objects>) 都是列表方法。但是extend 接受一个可迭代的:help(list.extend) extend(self, iterable, /) Extend list by appending elements from the iterable.; appendhelp(list.append)append(self, object, /) Append object to the end of the list.。所以我觉得sys.path.append('/path/to/module')sys.path.extend(['/path/to/module'])是一样的。
  • 对不起,你绝对是对的。我对永久添加到路径的另一种方法感到困惑,因为我之前遇到过这个问题。将模块永久添加到路径的最简单方法是添加文件夹到您的 PYTHONPATH 环境变量中,这样您只需添加一次,并且始终可以使用“from stack_class import Stack”导入它
【解决方案2】:

尝试使用:

sys.path.extend('file path here') 

将文件夹路径添加到你的 python 路径,这样 python 就知道在哪里寻找 stack_class 模块 - 要么在导入之前导航到文件夹

还要确保在文件夹中您的初始化文件名​​为 __init__.py

你应该可以这样做

from stack_class import Stack

【讨论】:

  • 无论如何直接做而不附加到sys.path?仅使用导入。
  • 这里有一堆选项stackoverflow.com/questions/67631/…,或者可以在导入之前导航到该文件夹​​...但在我看来,所有这些都过于冗长...您是否有不想添加它的原因走向你的道路?绝对是最简单的方法,你只需要做一次
  • 附加到路径是否被认为是最佳实践?
  • 如果它是您想要永久访问的包,那么我会说是的,或者只是将它添加到存储其余 python 包的站点包文件夹中
【解决方案3】:

您是否确保将正斜杠“\”与反斜杠“/”切换?

【讨论】:

  • 从 C:/Users/jose_/Desktop/my_ref/stack_class.py 导入堆栈
  • \是反斜杠,/是正斜杠
猜你喜欢
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
相关资源
最近更新 更多