为什么setup.py安装旧文件?
我正在为一个更大的系统开发一个Python模块。我做了一个setup.py文件,用来在主模块中安装它。一开始一切都很顺利,但后来我对我的模块做了一些修改,主要是改了.py文件的名字,并重新组织了一些类。
接着我更新了模块的版本,先用pip卸载了旧版本,然后用python setup.py install安装了新版本。但是当我在ipython中尝试导入时,发现导入的还是之前的旧模块。
这让我觉得很奇怪,于是我检查了我的虚拟环境的lib文件夹,发现里面有两个版本的模块,一个是旧的类结构,另一个是新的。而且这两个版本都可以用,我在ipython中都能导入并测试它们。
虽然这并没有造成什么问题,因为我可以直接使用最新的版本,但这让我感到困惑。有人知道为什么会出现这种情况吗?
2 个回答
你可以试着在文件夹里用 pip
安装,方法是运行 pip install -e .
命令。这种方式会以 可编辑模式 安装这个包。也就是说,你对代码所做的任何修改都会立即生效。
如果你不是通过 pip
安装的,那就不能用 pip
卸载,所以你其实并没有真正卸载旧版本。使用 python setup.py install
可以安装不同的版本,但通常它们会覆盖旧版本(除了 .egg-info
文件或目录)。你没有说明这两个版本是怎么共存的,因为 setup.py
(或者 pip
)不会把 site-packages/my_module
改名为 my_module_v1
之类的。我猜测你可能改变了目录结构和 .py
文件的名字,让这两个版本可以在同一个父目录下共存,这样在 IPython 中你就可以同时运行 from my_module import OldClassName
和 from my_module import NewClassName
。