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

问题描述 投票:5回答:2

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

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

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

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

python packaging setup.py
2个回答
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


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.