【问题标题】:Importing classes - Python导入类 - Python
【发布时间】:2021-05-28 21:50:03
【问题描述】:

早上好,我遇到了以下问题。准确地说,我有以下设置:

Project_Name
|
|--> __init__.py
|
|--> Tool1
|      |
|      |--> Object1.py
|      |
|      |--> __init__.py
|
|--> Tool2
       |
       |--> Object2.py
       |
       |--> __init__.py

其中 Project_name、Tool1 和 Tool2 是文件夹。 Object2 包含一个名为“House”的类。如何在 Object1 中使用“House”类?我尝试了以下方法:

from Tool2.Object2 import House

但我收到错误消息“没有名为“Tool2”的模块。

我做错了什么?所有 init.py 文件都是空的,我应该更改吗?

【问题讨论】:

  • 主脚本在哪里执行?以及如何执行它?从终端还是 IDE?
  • 我将在另一个 Project_name 子文件夹(即测试文件夹)中使用 Object1。我使用 VSCode 及其终端。
  • 试试from Project_Name.Tool2.Object2 import House

标签: python import package python-import


【解决方案1】:

1

如果您使用 VS 代码,最简单的解决方法是启动 正在执行的脚本,如下所示。

import sys

sys.path.append('/PATH/TO/Project_Name')

import Tool1.Object1

...

2

或者,您可以将环境变量PYTHONPATH添加到settings.json(可以找到ctrl + shift + P然后输入settings.json

    "terminal.integrated.env.linux": {
        "PYTHONPATH": "/PATH/TO/Project_Name/"
    }

这样就可以了

import Tool1.Object1

sys.pathPYTHONPATH 将为您做同样的事情。

【讨论】:

  • 看来还是不行。现在,当我这样做时,我也一直出现“无法导入”的错误:从 Tool2.Object2 导入 House。这可能与我设置 PYTHONPATH=/PATH/TO/Project_Name 的事实有关吗?
  • 我测试过。告诉我你用来执行主脚本的命令。
  • 我其实是用VSCode的“在python终端运行”功能
  • 如果您使用的是 VSCode,您可能需要检查一下:stackoverflow.com/questions/59702230/…
  • @YodaAndFriends 已编辑。请检查。 :)
【解决方案2】:

您需要将PYTHONPATH 导出到您的Project_Name,以便解释器知道要查找的特定文件夹。

export PYTHONPATH=path/to/your/project

例如:

object1.py

from tool2.object2 import House

house = House()
house.print_message("Hello World!!!")

object2.py

class House(object):
    def __init__(self):
        pass
    
    def print_message(self, text):
        print(text)

导出PYTHONPATH前后的输出

$ python tool1/object1.py                                                                                                                                                                                                                       
Traceback (most recent call last):
  File "tool1/object1.py", line 2, in <module>
    from tool2.object2 import House
ImportError: No module named tool2.object2

$ pwd                                                                                                                                                                                                                                      
/Users/.../StackOverflow

$ export PYTHONPATH=/Users/.../StackOverflow                                                                                                                                                                

$ python tool1/object1.py                                                                                                                                                                                                                       
Hello World!!!

$ python object1.py                                                                                                                                                                                                                       
Hello World!!!

【讨论】:

  • 你能说得更准确点吗?我应该把出口声明放在哪里?
  • 您首先需要打开终端并将目录更改为您的文件夹Project_Name。接下来,使用pwd 命令行获取此文件夹的路径(假设为 X)并将path/to/your/project 替换为 X 以导出。
  • 你能告诉我你从中得到了什么吗:echo $PYTHONPATH
  • 当然:/Users/myName/Desktop/Origin/Project_Name
  • 您应该像这样从Project_Name 目录调用脚本:python Tool1/Object1.py 然后它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 2019-05-03
  • 2016-07-30
  • 2016-04-15
  • 2013-05-18
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多