python - “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
当我希望我的本地更改在不推送新提交的情况下反映在本地环境中时,我一直在解决这个问题,尽管这对我来说并不理想。
解决方案
我的问题源于对如何实施的误解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 的软件包也可以使用 :-) 在使用附加功能进行开发安装时也需要它,尽管这需要稍微冗长的语法,因为点子中的一个错误。
推荐阅读
- ruby-on-rails - 测试搜索或丢失翻译的每个视图 span.translation_missing
- excel - 如何将保存到 Excel 集合中的对象重新显示?
- .net - 在 windows server 2016 win10 上卸载 4.7 .dotnet 框架并安装 4.6.1
- c - 为什么在 C 中在 printf 内部或外部调用此函数会给出不同的输出
- matlab - 在 fmincon 中应用变量的变化
- git - 如何将文件夹从一个 Git 存储库共享到另一个?
- android - Firebase firestore:如何在 Android 的 Kotlin 中以秒为单位创建时间戳
- python - 冒泡排序无限循环错误的变化
- reactjs - 如何在 ReactJS 上触发组件中的状态更改?
- arrays - Angular - formGroups 数组的 setValue() 设置整个 formArray 值的最后一个对象