# setup.py
from setuptools import setup, find_packages
setup(
name='awesome_package',
version='1.0.0',
# find_packages() will ignore non-python files.
packages=find_packages(),
)
init.py或令人敬畏的_module.py:
import os
# The current directory
__here__ = os.path.dirname(os.path.realpath(__file__))
# Place the following function into __init__.py or into awesome_module.py
def check_editable_installation():
'''
Returns true if the package was installed with the editable flag.
'''
not_to_install_exists = os.path.isfile(os.path.join(__here__, 'not_to_install.txt'))
return not_to_install_exists
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
最近我不得不测试不同的包是否在不同的机器上以可编辑模式安装。运行pip show <package name>不仅会显示版本,还会显示其他信息,包括源代码的位置。如果包不是以可编辑模式安装的,这个位置将指向site-packages,所以对于我的情况来说,检查这样的命令的输出就足够了:
import subprocess
def check_if_editable(name_of_the_package:str) -> bool:
out = subprocess.check_output(["pip", "show", f"{name_of_the_package}"]).decode()
return "site-packages" in out
5条答案
按热度按时间qyswt5oh1#
另一种解决方案:
在你的软件包中放置一个“不安装”文件。这个文件可以是
README.md
,也可以是not_to_install.txt
文件。使用任何非Python扩展名来阻止这个文件的安装。然后检查这个文件是否存在于你的软件包中。建议的源结构:
setup.py:
init.py或令人敬畏的_module.py:
soat7uwm2#
我不知道直接检测这种情况的方法(例如,询问
setuptools
)。你可以试着检测你的包不能通过
sys.path
中的路径到达,但是这很乏味,而且也不是完全安全的--如果它可以通过sys.path到达,但是它也被安装为可编辑的包呢?最好的选择是查看可编辑安装在
site-packages
文件夹中留下的工件,其中有一个名为my_package.egg-link
的文件。注意:为了使这一点更防弹,只读取
egg-link
文件的第一行,并使用Path()
解析它,以及考虑适当的斜线等。1yjd4xko3#
最近我不得不测试不同的包是否在不同的机器上以可编辑模式安装。运行
pip show <package name>
不仅会显示版本,还会显示其他信息,包括源代码的位置。如果包不是以可编辑模式安装的,这个位置将指向site-packages
,所以对于我的情况来说,检查这样的命令的输出就足够了:d8tt03nd4#
还没有找到一个明确的来源,但如果的输出
是这样的:
那么它可能是可编辑的。
eulz3vhy5#
运行
pip list
,会有一个名为“Editable project location”的列,如果该列有值,特别是您安装它的目录,则该包以可编辑模式pip安装。