所以我有一个 Python 脚本,我正试图将其分发到 Linux 主机。
根据当前的最佳实践,我正在尝试在 virtualenv 沙箱中部署我的脚本。但是,我注意到 virtualenv 不会虚拟化目录,例如 /usr/sbin
、/var/lib
和 /etc
。按照Linux最佳实践,我需要将各种文件和配置写入上述目录。
如果 virtualenv 不虚拟化这些目录,我如何创建真正的沙盒部署?
最佳答案
简单的“安装然后复制/移动”程序
过程很简单:
- 设置一些虚拟环境
- 在其中安装您感兴趣的脚本
- 将它移动到你喜欢的目录,例如到/usr/bin
诀窍是,脚本在内部获取虚拟化 python 的编码路径,因此当您调用它时,它正在使用虚拟化环境。
通常,编码是绝对路径,因此移动脚本文件不会造成任何损害。
但是,有虚拟环境的目录(Python在哪里)必须保留在原处,这是脚本运行的前提。
安装脚本必须通过 setup.py
并且必须使用参数 entry_point
。使用 scripts
是行不通的,因为它只是获取引用文件并仅进行简单复制。
奖励:setup.py
选项 --install-scripts
setup.py
允许指定安装脚本的位置。您可以尝试使用它(但这不是必需的)。
$ python setup.py install -h
Common commands: (see '--help-commands' for more)
setup.py build will build the package underneath 'build/'
setup.py install will install the package
Global options:
--verbose (-v) run verbosely (default)
....
Options for 'install' command:
....
--install-scripts installation directory for Python
scripts
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: setup.py --help [cmd1 cmd2 ...]
or: setup.py --help-commands
or: setup.py cmd --help
结论
- virtualenv 允许隔离已安装脚本的 python 环境,同时允许将脚本简单复制/移动到任何位置,包括。系统目录。
- 如果脚本是使用标准
setup.py
安装的,则以上是可能的,它将脚本引用放置在 virtualenv python 周围。复制纯 Python 文件会失败。 setup.py
甚至允许直接指定安装脚本的位置。
关于python - 为什么 virtualenv 不虚拟化任意目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24439700/