"setup.py develop"安装git远程版本而不是具有实时更改的本地版本



通常,当我开发一个供个人使用的Python包时,我会使用python3 setup.py develop,然后在另一个虚拟环境中执行pip3 install -e <path_to_package>,从而允许我同时使用两者。当我执行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。我的目标是使用软件包的开发版本快速测试想法,而无需持续集成。

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

但是,如果我想让 pip3 安装最新的 GitHub 提交,我无论如何都不会为setup.py develop而烦恼。

有没有办法向 setup.py 发出信号,我希望它忽略克隆存储库中的远程并只注意本地路径?还是在显示设置工具的预期行为时始终引用远程?

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

# 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来获取 egg 链接。

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

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

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

提问者写道:

多年来,我一直在推荐:

$ 蟒蛇 setup.py 开发

[...]

话虽如此,我还注意到:

$ 点安装 -e .

做同样的事情。

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

诺亚回答:

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

相关内容

  • 没有找到相关文章

最新更新