如何检测模块是否以“可编辑模式”安装?

fre*_*rik 6 python pip

我正在像这样点子安装我的模块:

cd my_working_dir
pip install -e .
Run Code Online (Sandbox Code Playgroud)

当我以后从Python导入模块时,是否可以某种方式检测模块是否以这种可编辑模式安装?

现在,我只是检查是否有一个.git文件夹os.path.dirname(mymodule.__file__)),只有在其中确实有一个.git文件夹时,它才起作用。有没有更可靠的方法?

小智 6

运行pip list,有一个名为“可编辑项目位置”的列。如果该列有一个值,特别是安装它的目录,则该包将以可编辑模式 pip 安装。


flo*_*sla 0

我不知道有什么方法可以直接检测到这一点(例如询问setuptools)。

您可以尝试检测是否无法通过中的路径到达您的包sys.path。但这很乏味。它也不是防弹的——如果可以通过 sys.path 访问它但它作为可编辑包安装怎么办?

最好的选择是查看可编辑安装在site-packages文件夹中留下的工件。my_package.egg-link那里有一个文件叫

from pathlib import Path

# get site packages folder through some other magic

# assuming this current file is located in the root of your package
current_package_root = str(Path(__file__).parent.parent)

installed_as_editable  = False
egg_link_file = Path(site_packages_folder) / "my_package.egg-link"
try:
    linked_folder = egg_link_file.read_text()
    installed_as_editable = current_package_root in linked_folder
except FileNotFoundError:
    installed_as_editable = False
Run Code Online (Sandbox Code Playgroud)

注意:为了使其更加防弹,请仅读取文件的第一行egg-link并使用它Path()来解析它以考虑正确的斜杠等。


归档时间:

查看次数:

199 次

最近记录:

6 年,4 月 前