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

"setup.py develop" installs git remote version instead of local version with live changes

通常当我开发一个供个人使用的 Python 包时,我使用 python3 setup.py develop,然后在另一个 virtualenv 中执行 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 我希望它忽略克隆的 repo 中的远程并只关注本地路径?或者在出现设置工具的预期行为时总是引用遥控器?

更新: 当遥控器不存在时 python3 setup.py develop 之后 gpip3 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 来自包目录本身,这将 install/link 全局鸡蛋

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

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

其实不需要在开发中的包中调用python3 setup.py develop,也不需要使用gpip3 freeze来获取egg link。

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

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

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

提问者写道:

For years, I've been recommending:

$ python setup.py develop

[...]

Having said that, I also notice that:

$ pip install -e .

does the same thing.

Should I be recommending one over the other?

诺亚回答:

You should recommend using pip for it, mostly because as you said that will work even with packages that don't use setuptools :-) It also is required when doing a develop install with extras, though that requires a slightly more verbose syntax due to a bug in pip.