【问题标题】:Python: Importing own files. Why does "import myFile" not work?Python:导入自己的文件。为什么“导入我的文件”不起作用?
【发布时间】:2019-04-30 08:09:20
【问题描述】:

为了构建我的 python 项目,我想将代码分成不同的文件。

我找到了有关导入 here 的大量指南,示例 1 似乎符合我的需要。

因此,我使用以下代码创建了一个文件 part.py

print("Hello world")

def myFunction():
    print("This is my function!")

然后我在同一个文件夹中创建了destination.py

import part
# from part import *

myFunction()

正如我所期望的 import part 将运行 part.py 的整个代码,我预期的结果是

Hello world
This is my function!

但是,我得到了

ModuleNotFoundError                       Traceback (most recent call last)
 in ()
----> 1 import part
      2 # from part import *
      3 
      4 myFunction()

ModuleNotFoundError: No module named 'part'

使用# from part import * 而不是import part 会导致同样的错误。

我做错了什么?


编辑: @hiro 主角: 我将一个空的__init__.py 文件放入同一个字典中。重新启动内核后,我在运行destination.py 中的所有代码时得到(注意hello world):

Hello world
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in ()
      2 # from part import *
      3 
----> 4 myFunction()

NameError: name 'myFunction' is not defined

再次运行destination.py中的所有代码后,我只得到

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
 in ()
      2 # from part import *
      3 
----> 4 myFunction()

NameError: name 'myFunction' is not defined

如果我现在作为第三个动作运行part.py 中的所有代码,我会得到

Hello world

然后我可以运行destination.py中的所有代码来获取

This is my function!

如果我只能一遍又一遍地运行 destination.py 并得到相同的结果,我会更喜欢它。

@纳尔曼: part.py是文件,但 import .part 抛出

 File "", line 1
    import .part
           ^
SyntaxError: invalid syntax

@Jeyekomon: 我在带有 Python 3.7.0 的 Windows 10 上使用 Visual Studio Code。

@9769953: 我直接在 Visual Studio Code 中运行代码

【问题讨论】:

  • part.py 的同一目录下是否有__init__.py 文件(可能为空)?这个目录在PYTHONPATH吗?
  • 在同一文件夹中创建一个空的__init__.py 文件
  • part 是一个文件吗?如果它只是一个文件并且您从同一个目录运行,则需要使用import .part,注意点。如果部分是一个模块,请确保在同一目录中有一个__init__.py 文件,并且 python 知道它在哪里
  • 您的代码对我来说很好用。您使用的是什么操作系统?你使用的是什么版本的 Python?你用什么命令来运行你的代码?错误的格式与我习惯的不同。
  • 你如何运行你的代码?你用python destination.py吗?

标签: python import


【解决方案1】:

模块导入问题现在似乎已修复。尽管在 Python 3 中 __init__.py 文件通常是 no longer needed,但您正在使用的 Visual Studio Code 似乎仍然需要它。

其余问题与使用模块有关。从official Python tutorial 学习创建和使用模块的基础知识。模块part 应该包含您可以在主文件destination 中调用的函数:

destination.py

import part

part.say_hello()
part.myFunction()
part.say_hello()

part.py

def say_hello():
    print("Hello world")

def myFunction():
    print("This is my function!")

【讨论】:

    【解决方案2】:

    将你的 destination.py 更改为:

    from part import *
    myFunction()
    

    这对我有用

    【讨论】:

    • OP 处理ModuleNotFoundError。您提出的解决方案修复了NameError,因此它不能解决 OP 的问题。
    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 2023-04-05
    • 1970-01-01
    • 2015-07-27
    • 2018-12-03
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多