我了解有关此主题的问题很多,但是我看到的大多数答案都描述了解决复杂的问题的方法,在我看来,这些问题应该很简单。这是我的目录结构:
Mapper/
LICENSE.txt
README.txt
setup.py
bin/
# nothing here, yet
mapper/
__init__.py
process.py
where.py
# ...
binconvert/
__init__.py
tocsv.py
todict.py
# ...
我想在我所有本地开发的模块上使用绝对路径,以减少混乱并避免此处提到的错误。
但是,我对此有多个问题。当我运行process.py
,其中我import
tocsv.py
喜欢这样,
from mapper.binconvert import tocsv
我得到错误: ModuleNotFoundError: No module named 'mapper'
我知道我可以做到from binconvert import tocsv
,但是就像我说的那样,我试图让我所有本地开发的模块导入都使用绝对路径。
我tocsv.py
尝试where.py
像这样导入时收到与以前相同的错误:
from mapper import where
对于这一点,我相信可以使用点点相对的方法import
,但再次,我想使所有路径保持绝对。毕竟,我相信,根据这个Python文档的推移,我应该能够做到这一点:
将包结构化为子包时(与示例中的声音包一样),可以使用绝对导入来引用同级包的子模块。例如,如果模块
sound.filters.vocoder
需要使用中的echo模块sound.effects package
,则可以使用fromsound.effects import echo
。
sound/ Top-level package
__init__.py Initialize the sound package
formats/ Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
...
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
执行时,process.py
您已经位于mapper包中。Python将遍历sys.path
查找中定义的所有路径以找到模块,在这种情况下,该模块仅由组成["standard python path", "Mapper/mapper"]
。
在这种情况下,python不会在这些目录中找到名为mapper的模块(您已经在mapper模块中了)。
为您提供的解决方案:
from .binconvert import tocsv
符合PEP 328)process.py
从该Mapper
目录启动和启动process.py
通过添加Mapper
路径来更改PYTHONPATH环境变量本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句