【问题标题】:Figure out in setup.py what repository this package is being installed from?在 setup.py 中找出这个包是从哪个存储库安装的?
【发布时间】:2020-01-22 09:52:43
【问题描述】:

假设我有一个python包blah

我可以通过两种方式安装它:

pip install git+https://github.com/blah/blah.git@blah(使用 github 仓库)

pip install blah(使用 pypi 存储库)

有没有办法确定用户在setup.py 中安装包的方式是什么?

所以我基本上可以做类似的事情:

if INSTALLING_FROM_PYPI:
   # some logic
if INSTALLING_FROM_SOMEWHERE_ELSE:
   # some other logic

【问题讨论】:

  • 模块之间有什么区别吗?
  • 不,pypi上的包和github上的包是100%一样的,包括setup.py脚本。我可以通过在 github 上使用不同的 setup.py 并在 pypi 上使用不同的 setup.py 来“解决”这个问题,但维护起来会相当乏味。
  • 我能看到的唯一方法是在 git 版本中创建一个像 FROM-GIT 这样的空白对象,然后尝试从代码中导入它。
  • @JammyDodger "创建一个像 FROM-GIT 这样的空白对象" 不需要——只测试.git 目录。
  • 但是如何获得该对象的路径?如,我是否保证setup.py 在特定位置执行,以便我可以获得 FROM-GIT 文件的相对路径?

标签: python-3.x pip setuptools setup.py pypi


【解决方案1】:

只需在您的 Git 存储库中包含一个文件:

$ touch .git-flag

在您的 MANIFEST.in 文件中明确将其从您的分发中排除:

exclude .git-flag

然后在setup.py 中,检查该文件相对于您的setup.py 文件是否存在:

import os

this_dir, this_filename = os.path.split(__file__)
path_to_flag = os.path.join(this_dir, ".git-flag")
installed_from_git = os.path.exists(path_to_flag)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多