首页 > 解决方案 > “setup.py develop” 安装 git 远程版本而不是本地版本并进行实时更改

问题描述

通常,当我开发供个人使用的 Python 包时,我会使用python3 setup.py develop,然后pip3 install -e <path_to_package>在另一个 virtualenv 中执行,这样我就可以同时使用两者。当我这样做时,我会gpip3 freeze在本地机器上看到包的路径:

-e /Users/myName/Documents/testpackage

当我将该包存储在 GitHub 上并将其克隆回本地计算机时,我希望能够使用setup.py develop相同的方式并继续在本地计算机上开发该包,无论是否或何时推送回 GitHub。但是,当我这样做时gpip3 freeze,我看到:

-e git+git@github.com:github_username/repo_name@-----latest_commit's_sha_code-----#egg=repo_name&subdirectory=xx/xx/testpackage

我希望我的系统跟踪本地版本而不是 git 的远程版本。

注意:我知道如何将本地更改提交和推送到 GitHub 并在本地环境中安装 egg。我的目标是使用包的开发版本快速测试想法,而无需持续集成。

gpip3 freeze注2:我在环境中尝试时给出的GitHub地址失败( FileNotFoundError: [Errno 2] No such file or directory: '/Users/myName/Documents/testenvironment/src/testpackage/setup.py'

但如果我想让 pip3 安装最新的 GitHub 提交,无论如何我都不会打扰setup.py develop

有没有办法向 setup.py 发出信号,我希望它忽略克隆仓库中的远程并只关注本地路径?或者在出现设置工具的预期行为时总是引用远程?

gpip3 freeze更新:当遥控器不存在时输出的措辞python3 setup.py develop(如下)使我认为尽可能跟踪遥控器可能是预期的行为:

# Editable Git install with no remote (testpackage ==0.0.1)
-e /Users/myName/Documents/testpackage

git remote remove origin当我希望我的本地更改在不推送新提交的情况下反映在本地环境中时,我一直在解决这个问题,尽管这对我来说并不理想。

标签: pythonpython-3.xgitsetup.py

解决方案


我的问题源于对如何实施的误解python3 setup.py develop

我原来的方法是:

1)python3 setup.py develop从包目录本身,它将全局安装/链接鸡蛋

2)gpip3 freeze获取(我认为)指向鸡蛋的链接(在这里看到所有额外的 git 远程信息让我感到困惑)

3)cd到另一个虚拟环境source bin/activate,然后调用pip3 install -e <link_copied_from_global_pip_freeze>

实际上没有必要python3 setup.py develop从正在开发的包中调用,或者使用gpip3 freeze来获取鸡蛋链接。

我可以直接进入虚拟环境并激活它,然后使用pip3 install -e <system_path_to_package_directory_containing_setup.py>. 如果包目录不存在,这将在包目录中创建一个 egg 链接。包内的编辑按预期反映在虚拟环境中,我可以根据自己的需要在包内自由使用Git版本控制,不受干扰。

我假设有时可能会python3 setup.py develop直接调用(setup.py develop --user也存在),但如果不这样做,我碰巧避免在我的全球环境中乱扔额外的包。

Python Disutils 线程中 2014 年问题的相关信息:

发问者写道:

多年来,我一直在推荐:

$ python setup.py 开发

[...]

话虽如此,我还注意到:

$点安装-e。

做同样的事情。

我应该推荐一个而不是另一个吗?

诺亚回答:

您应该建议使用 pip ,主要是因为正如您所说,即使使用不使用 setuptools 的软件包也可以使用 :-) 在使用附加功能进行开发安装时也需要它,尽管这需要稍微冗长的语法,因为点子中的一个错误。


推荐阅读