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

标签 python linux python-2.7 virtualenv

所以我有一个 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/

相关文章:

python - 使用 Python 在一个文件中找不到另一个文件中最常见的单词

python - 数据帧 : Set User defined values while grouping

c++ - 如何在 Linux 中链接 QT 和 OpenCV

python - 正确模拟在另一个 celery 任务中调用的 celery 任务

python - 如何在 Python 程序中正确使用 gdaladdo?

mysql - 第 1 行 : Field separator argument is not what is expected when using mysql LOAD 处的错误 1083 (42000)

python - 从python hadoop映射器输出空白

python - App Engine 继续为以前的 Python 版本提供服务

python - SQLAlchemy 和 DDD

linux - ImageMagick:可以删除图片的中间部分吗?