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搜索路径的一部分。