Python 如何导入不同路径中的模块而不向模块追加路径?

Python 如何导入不同路径中的模块而不向模块追加路径?,python,import,Python,Import,下文给出了回购结构 cli_stats/ |__ __init__.py |__ README.md |__ docs/ | |__ docs |__ cli_stats/ | |__ cli_stats.py | |__ league_season_init.pickle (generated from setup.py) |__ pickle/ | |__ __init__.py | |__ setup.py

下文给出了回购结构


cli_stats/      
|__ __init__.py 
|__ README.md   
|__ docs/   
|     |__ docs
|__ cli_stats/  
|     |__  cli_stats.py
|     |__  league_season_init.pickle (generated from setup.py)
|__ pickle/ 
|     |__  __init__.py
|     |__  setup.py
|     |__  get_id/
|     |       |__ __init__.py
|     |       |__ get_id.py
|     |__ get_stats/
|     |       |__ __init__.py
|     |       |__ get_stats.py
|     |__ api_scraper/
|         |__ __init__.py
|         |__ api_scraper.py
|         |__  check_api.py
|       
|__ directory/  
|    |__ __init__.py
|    |__ directory.py
|__clean_stats/ 
     |__ __init__.py
     |__ clean_stats.py

例如,如何导入
directory.py
clean_stats.py
而不直接插入
directory.py
clean_stats.py
的路径?我现在做的是:

sys.path.insert(0,../directory')
从目录导入目录
我想做的是:

从目录导入目录

是否有办法利用
\uuuu init\uuuuuuuuuuuuupy
进行此类导入?

clean\u stats.py
中:

from..directory导入目录

用于识别
目录
,而不必写入

from..directory.directory导入目录
您需要将 在
目录/\uuuuu init\uuuuuu.py中

来自。导入目录

最后,当您从一个更高级别(即从
cli\u stats
的父文件夹中的脚本)导入包时,所有相关导入都可以正常工作

如果您从包中的其他入口点开始执行,则总会有导入失败,除非您从启动脚本的角度修复相对路径。问题是,若你们这样做,你们修复了一个地方,而其他地方将永远出错。所以,让您的导入包从外部导入和使用,而不是直接从内部脚本运行。即使您在任何地方都以包名开始写入绝对导入路径,此问题仍然存在,因为内部起始点看不到外部子包


请注意,还有其他选项,如像您所做的那样附加
sys.path
,定义
PYTHONPATH
,或通过
pip
pip-e
在系统或虚拟机中安装包等。但所有这些选项通常用于您所依赖的其他库,而不是程序包内部。

谢谢您的输入!每次我运行一个模块时,我都会站在工作目录中,如果我理解正确,我应该站在
cliu stats
中执行一个模块,因为我修复了所有导入语句?模块与
.py
文件或Python脚本相同。每次将
\uuuu init\uuuu.py
放入文件夹时,您都会将该文件夹转换为(常规导入)包。一个包可以以相同的方式拥有任意数量的子包(这通常会组织一个包内部代码,其中可能包含许多模块)。导入包是由外部代码导入的,就像从标准库导入模块一样。因此,不应该处于模块的工作目录中。使用包的模块应该在任何地方使用包,因为它在包之外,并且可以找到包。一个简单的答案是将包文件夹放在导入它的模块的同一文件夹中。这是有效的,因为工作(执行)文件夹是模块和包的Python搜索路径的一部分。