【发布时间】:2018-06-10 15:29:16
【问题描述】:
我有一个大型 python 模块,它在依赖关系方面特别复杂,并且在 Raspberry Pi 上它现在与几个核心模块(枕头、pyserial 和其他一些)冲突,这些模块不容易被覆盖。一般来说,安装到 virtualenv 中是最好的。但我发现这有点超出了一些用户的范围,因为大多数用户只会使用安装的 CLI 命令而不是模块 API,所以我想让事情自动化。是否有可能以任何方式使用 setuptools 执行以下操作?
- virtualenv 不可用时自动安装
- 将模块安装到 virtualenv 中
- 将需要的依赖项安装到 virtualenv 中
- 将 CLI 命令设置为从该 virtualenv 自动运行而无需先激活它
【问题讨论】:
-
如果您打算使用
pip安装软件包,那么没有办法这样做。如果您不反对 RPM 或 deb 包 - 我知道rpmvenv可以创建包含虚拟环境的 RPM 包,而fpmcan bundle existing environments,因此您在系统包旁边安装了一堆 python 包。 AFAIK,它可以构建很多格式,包括 RPM 和 deb。通过pip install rpmvenv和gem install fpm安装(它是一个Ruby 工具)。 -
有趣但似乎不支持 Windows,这是一个要求。虽然也许还有另一个 python 打包工具可以做类似的事情。我很想保持点子支持,但如果不是世界末日的话。
-
嗯,考虑到 Windows,我还会查看使用
pyinstaller/cxFreeze等构建的独立安装程序,但是,我对这些的经验很少。在我看来,最好的 Windows 选项是使用 NSIS 编写独立的安装程序。在安装脚本中,您可以创建一个全新的虚拟环境,在 env 中安装软件包及其依赖项并调整PATH以便安装的可执行文件可用。不幸的是,标准的打包工具 (distutils/setuptools) 根本不够强大。
标签: python virtualenv setuptools