Python distutils-使用.so C扩展名覆盖旧的py实现

Python distutils-使用.so C扩展名覆盖旧的py实现,python,cython,distutils,cpython,Python,Cython,Distutils,Cpython,我的库中的第一个软件包草稿是一个foo.py文件,我现在用Cython/C扩展名取代了它,一个foo.so——然而,distutils并没有自动意识到旧的.py文件已经不存在了,所以在安装之后,这两个文件都位于站点软件包目录中(使用import时,谁知道加载了哪一个。) 显然,我可以自己手动删除旧文件,但我不希望我的库的用户不得不关心这类事情 处理这个问题的规范/distutils/pythonic方法是什么?是否有类似的语法 from distutils import setup setup(

我的库中的第一个软件包草稿是一个
foo.py
文件,我现在用Cython/C扩展名取代了它,一个
foo.so
——然而,distutils并没有自动意识到旧的.py文件已经不存在了,所以在安装之后,这两个文件都位于站点软件包目录中(使用
import
时,谁知道加载了哪一个。)

显然,我可以自己手动删除旧文件,但我不希望我的库的用户不得不关心这类事情

处理这个问题的规范/distutils/pythonic方法是什么?是否有类似的语法

from distutils import setup
setup(..., depricated=['path/to/foo.py'])

要指示在升级时从安装目录中删除过时的.py文件?

distutils中没有
uninstall
命令。尽管
pip
可以在安装新版本之前自动删除旧版本。其他安装程序也可以提供
uninstall
命令

如果用户是从源代码安装,请指示用户使用
pip
。默认情况下,大多数二进制格式(如rpm、deb、msi)都支持卸载。顺便说一句,它提供了一种转换python软件包的简便方法


您可以使用
python-v
查看为您的模块加载了哪些文件。
。因此
可能具有更高的优先级,但在这种情况下,您不应该依赖它,而是删除旧版本。

相关:嗯,这是关于升级的,而不是卸载。卸载和重新安装也可以达到同样的目的是的,但是由于
distutils
没有卸载功能,我认为这对最终用户没有帮助。谢谢你的回答,但我会保留这个问题,以防有人有聪明的方法来处理这个问题-我希望有比在我的setup.py中添加一些黑客更好的方法来搜索过时/有害的文件。@tehwalrus:我看不到答案中指出,您应该向
setup.py
添加任何黑客。问题是我如何确保最终用户不必担心这一点(“但我不希望我的库的用户必须关心这类事情”)。他们将运行
setup.py
,就是这样,为了“删除旧版本”正如您所建议的,我必须在setup.py中添加一些“它在那里吗?是吗?删除它”hack,以便在命令为
install
(即我们将拥有对安装目录的写入权限时)时运行。我知道您没有明确建议,但需要按照您的说明进行操作。@tehwalrus:我添加了明确的建议。