gpt4 book ai didi

python - 检查我的应用程序是否在开发/可编辑模式下运行

转载 作者:太空狗 更新时间:2023-10-30 02:56:07 25 4
gpt4 key购买 nike

我的 Python 应用程序可以以正常方式安装,也可以使用 pip 在开发/可编辑模式下安装,如下所示:

virtualenv my_app
source my_app/bin/activate
pip install -e my_app

我如何创建一个函数来检查我的 virtualenv 并检查我的应用程序是否在开发/可编辑模式下运行?

sys 模块中是否有任何“标志”?

动机:在开发模式和生产模式中有不同的配置。

编辑:我比较了 virtualenvpackage 目录。

import os
import sys

import pkg_resources

main_pkg = 'my_app'
package_dir = pkg_resources.resource_filename(main_pkg, '__init__.py')
virtualenv_dir = os.path.dirname(os.path.dirname(sys.executable))
common_path = os.path.commonprefix([package_dir, virtualenv_dir])
is_dev_mode = not common_path.startswith(virtualenv_dir)

我测试 package_dir 是否是 virtualenv_dir 的子目录:如果它不是子目录,那么我处于开发模式。

编辑 2:

有没有更靠谱的方案?

我想知道环境中是否没有数据/标志可以清楚地向我表明我的应用程序正在开发模式下运行。

如果另一个依赖项也在开发模式下会发生什么?

最佳答案

使用 pip 中的代码,我们可以确定这一点:

import pip
import pkg_resources

# I've done `pip install -e .` for a git repo I'm working in inside
# a virtualenv
distributions = {v.key: v for v in pkg_resources.working_set}
# >>> distribution
# pre-commit 0.9.3 (/home/asottile/workspace/pre-commit)
distribution = distributions['pre-commit']

# Below is approximately how `pip freeze` works, see the end of
# the answer for a simpler approach, still using pip

# Turn into a pip FrozenRequirement (I'm using pip 9.0.1, it may
# be different for your version)
# I've passed an empty list for the second argument (dependency_links)
# I don't think it's necessary?
frozen_requirement = pip.FrozenRequirement.from_dist(distribution, [])

# Query whether the requirement is installed editably:
print(frozen_requirement.editable)

它的神奇之处在于 pip 中的一个小函数 (pip.utils):

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

这里的 dist 是一个 pkg_resources 分布(正如我们在上面获得的)。您当然可以直接使用 dist_is_editable 函数,而不是通过 FrozenRequirement:

# With `distribution` as above:
from pip.utils import dist_is_editable
print(dist_is_editable(distribution)) # True in my case ;)

关于python - 检查我的应用程序是否在开发/可编辑模式下运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40530000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com