Python:在另一个包中导入包而不使用完整路径
我有一些代码[在Linux上]无法正确导入: 文件(每个python文件只包含一个名称和大小写相同的类): CommandReader.py的导入: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
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
,会发生什么?我建议首先使用绝对导入,然后在一切正常后最终切换到相对导入。关于一个相对类似的问题,请参见以下答案: