"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 develop
(setup.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.
通常当我开发一个供个人使用的 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 develop
(setup.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.