Python:在另一个包中导入包而不使用完整路径

Python:在另一个包中导入包而不使用完整路径,python,import,module,package,pythonpath,Python,Import,Module,Package,Pythonpath,我有一些代码[在Linux上]无法正确导入: 文件(每个python文件只包含一个名称和大小写相同的类): CommandReader.py的导入: from y import Switch from y import Option from x import InputArg y/Switch.py和y/Option.py的导入: from y import Switch from y import Option from x import InputArg y/___uu初始值.py

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

文件(每个python文件只包含一个名称和大小写相同的类):

CommandReader.py的导入:

from y import Switch
from y import Option
from x import InputArg
y/Switch.py和y/Option.py的导入:

from y import Switch
from y import Option
from x import InputArg
y/___uu初始值.py:

from .import x
from .Switch import Switch
from .Option import Option
from .InputArg import InputArg
y/x/_____u; init.py:

from .import x
from .Switch import Switch
from .Option import Option
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'
$python3./CommandReader.py
回溯(最近一次呼叫最后一次):
文件“CommandReader.py”,第12行,在
从y输入开关
文件“/home/swatts/code/commandreader/y/_init__.py”,第2行,在
from.Switch导入开关
文件“/home/swatts/code/commandreader/y/Switch.py”,第8行,在
从x导入输入
ModuleNotFoundError:没有名为“x”的模块

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

一个解决方案是,您可以在环境变量中添加模块的路径:

path
中添加路径,该路径位于
环境变量中

如果您使用的是
Windows

  • 右键单击
    My Computer
    并转到
    Properties
  • 选择高级系统设置
  • 转到选项卡
    Advanced
  • 单击环境变量
  • 系统变量
    部分搜索
    路径
    变量
  • 双击它并在其
    值列表中添加路径
  • 您还可以使用以下代码执行以下操作:

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

    我使用的是Linux,仅仅为了让它工作而更改环境变量,这不是太过了吗,或者我只是误解了Python希望如何完成包?如果不想更改环境变量,则需要在代码中指定模块的路径,因为Python需要该模块的引用,如模块来自何处。请检查此链接。这可能对你有帮助。明白了,所以Python不支持导入,正如我试图以类似于Java的方式进行导入一样。我真的怀疑是否有必要执行这些步骤。据我所知,几乎没有必要修改
    sys.path
    或环境变量
    PYTHONPATH
    。相反,在本例中,最好使用
    python-m CommandReader
    运行代码,并将所有导入更改为绝对导入。最后,一旦它稳定下来,如果需要的话,逐步地改回相对导入。如果您运行
    python3-m CommandReader
    ,会发生什么?我建议首先使用绝对导入,然后在一切正常后最终切换到相对导入。关于一个相对类似的问题,请参见以下答案: