为什么virtualenv虚拟化任意目录?

时间:2014-06-26 20:32:41

标签: python linux python-2.7 virtualenv

所以我有一个Python脚本,我试图分发给Linux主机。

根据当前的最佳做法,我尝试在virtualenv沙箱中部署我的脚本。但是,我注意到virtualenv并没有虚拟化/usr/sbin/var/lib/etc等目录。根据Linux最佳实践,我需要将各种文件和配置写入上述目录。

如果virtualenv没有虚拟化这些目录,我如何创建真正的沙盒部署?

1 个答案:

答案 0 :(得分:1)

简单"安装然后复制/移动"过程

程序很简单:

  • 设置一些virtualenv
  • 在其中安装您感兴趣的脚本
  • 将其移至您喜欢的目录,例如到/ usr / bin

诀窍是,脚本在内部获得了虚拟化python的编码路径,所以当你调用它时,它正在使用虚拟化环境。

通常,编码是绝对路径,因此移动脚本文件不会造成任何损害。

但是,具有虚拟env的目录(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甚至允许直接指定脚本的安装位置。