“ setup.py开发”将安装git远程版本而不是具有实时更改的本地版本

时间:2019-10-01 06:47:38

标签: python python-3.x git setup.py

通常,当我开发供个人使用的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)中尝试使用FileNotFoundError: [Errno 2] No such file or directory: '/Users/myName/Documents/testenvironment/src/testpackage/setup.py'中给出的GitHub地址失败

但是,如果我希望pip3安装最新的GitHub commit,无论如何我都不会为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

我一直希望km = 0.1 nodes_df['count'] = nodes_df.apply(lambda row: sum(haversine_np(row.lng, row.lat, rents_df.lng, rents_df.lat) < km), axis=1) nodes_df id title lng lat count 0 1 place1 19.036077 67.490958 0 1 2 place2 167.031030 37.491231 0 2 3 place3 147.630428 27.492500 0 3 4 place4 117.029558 17.494329 0 4 5 place5 147.529326 57.495018 0 能够解决此问题,但是我希望将本地更改反映在本地环境中而不推送新的提交,尽管这对我来说并不理想。

1 个答案:

答案 0 :(得分:0)

我的问题源于对如何实现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 thread中2014年问题的相关信息:

提问者写道:

  

多年来,我一直在建议:

     

$ python setup.py开发

     

[...]

     

话虽如此,我也注意到:

     

$ pip install -e。

     

做同样的事情。

     

我应该推荐一个吗?

诺亚回答:

  

您应该建议为此使用pip,主要是因为您说过即使在不使用setuptools的软件包中也可以使用:-)使用Extras进行开发安装时也需要使用pip,尽管这需要稍微冗长一些语法由于pip中的错误而引起。