问题
Is there any way to check whether a Python package has been installed normally (pip install
/ setup.py install
) or in editable/egg-link mode (pip install -e
/ setup.py develop
)?
I know I could check whether the path to the package contains site-packages
which would most likely mean it's a "non-editable" install, but this feels extremely dirty and I would rather avoid this.
The reason I'm trying to check this is that my application is checking for config files in various places, such as /etc/myapp.conf
and ~/.myapp.conf
. For developers I'd like to check in <pkgdir>/myapp.conf
but since I show the list of possible locations in case no config was found, I really don't want to include the pkgdir option when the package has been installed to site-packages (since users should not create a config file in there).
回答1:
pip
contains code for this (it's used by pip freeze
to prefix the line with -e
). Since pip
's API is not guaranteed to be stable, it's best to copy the code into the own application instead of importing it from pip
:
def dist_is_editable(dist):
"""Is distribution an editable install?"""
for path_item in sys.path:
egg_link = os.path.join(path_item, dist.project_name + '.egg-link')
if os.path.isfile(egg_link):
return True
return False
The code is MIT-licensed so it should be safe to copy&paste into pretty much any project.
来源:https://stackoverflow.com/questions/42582801/check-whether-a-python-package-has-been-installed-in-editable-egg-link-mode