为什么setup.py会安装旧文件?

时间:2014-09-12 21:39:07

标签: python packaging setup.py

我正在为更大的系统开发python模块。我做了一个setup.py包,用于在主模块中安装它。它工作正常,但后来我对我的模块进行了一些更改,主要修改了py文件的名称,并重新组织了一堆类。

然后我更新了模块的版本,用pip卸载旧版本,并使用python setup.py install安装新版本,当我尝试在ipython中导入时发现我得到了较旧的,已删除的模块。

发现它很奇怪,检查了我的virtualenv lib文件夹,找到了模块的两个版本,旧的类结构和新的。并且两者都可用,因为我在ipython中导入并测试了它。

它没有引起任何问题,因为我可以简单地使用最新版本,但令人困惑。知道为什么会出现这种行为吗?

2 个答案:

答案 0 :(得分:4)

如果您未使用pip进行安装,则无法使用pip进行卸载,因此您实际上从未卸载旧版本。 python setup.py install将安装不同的版本,但通常它们安装在旧版本之上(.egg-info文件或目录除外)。你不能说这两个版本是如何并排生活的,因为setup.py(或pip)不会将site-packages/my_module重命名为my_module_v1 }, 例如。我假设您更改了目录结构和.py文件名,这两个版本可以在同一个父目录中共存,因此在IPython中您可以运行from my_module import OldClassNamefrom my_module import NewClassName

答案 1 :(得分:2)

您可以尝试使用目录中的pipsetup.py文件中使用pip install -e .进行安装。这会将软件包安装在editable mode中。它将安装您对代码所做的任何更改。