Python: 在不使用完整路径的情况下将一个包导入另一个包

Python: Importing a package in another package without using the full path

我有一些代码无法正确导入 [在 Linux]:

文件(每个 python 文件只包含一个 class 的同名和大写):

commandreader/
|-- CommandReader.py
|-- y/
    |-- Switch.py
    |-- Option.py
    |-- __init__.py
    |-- x/
        |-- InputArg.py
        |-- __init__.py

CommandReader.py 的导入:

from y import Switch
from y import Option

y/Switch.py 和 y/Option.py 的导入:

from x import InputArg

y/__init__.py:

from .import x
from .Switch import Switch
from .Option import Option

y/x/__init__.py:

from .InputArg import InputArg

错误:

$ python3 ./CommandReader.py
Traceback (most recent call last):
  File "CommandReader.py", line 12, in <module>
    from y import Switch
  File "/home/swatts/code/commandreader/y/__init__.py", line 2, in <module>
    from .Switch import Switch
  File "/home/swatts/code/commandreader/y/Switch.py", line 8, in <module>
    from x import InputArg
ModuleNotFoundError: No module named 'x'

编辑:除了我的错误,我是否误解了 Python 希望包如何工作?因为这是我的印象。

一种解决方法是,你可以在环境变量中添加模块的路径:

添加Path中的路径Environmental Variable

如果您正在使用 Windows

  1. 右键单击 My Computer 并转到 Properties
  2. Select Advanced system settings
  3. 转到选项卡 Advanced
  4. 点击Environment Variables
  5. System Variables 部分搜索 Path 变量
  6. 双击它并在其 value 字段的列表中添加路径。

您也可以使用代码:

import sys
sys.path.append(path)
print(sys.path)