【问题标题】:How to install Python Package for global use by all users (incl. www-data)如何安装 Python 包以供所有用户全局使用(包括 www-data)
【发布时间】:2017-01-21 03:06:52
【问题描述】:

我以为我在我们的服务器 (Ubuntu 16.04) 上编写了一个肮脏的脚本,它为我提供了一些 Python 的纯文本输出。

我想从 PHP 中调用这样的脚本(我知道应该进行一些转义,但目前只是一个测试):

<?php
$command = '/usr/local/bin/script.py';
$output = shell_exec($command);
echo $output;
?>

这是script.py,属于www-data模式774

#!/usr/bin/python
import CoolProp.CoolProp as CP
import argparse
print('Hallo Welt')

如果我注释掉 CoolProp 导入,它会起作用。但不知何故,www-data 无法访问该包,因此脚本什么也不返回。

如你所见,我想使用包CoolProp

  1. 所以我尝试使用pip install CoolProp=> 安装它,这适用于我的本地用户。但是现在当从用户www-data 调用时
  2. 在我尝试使用目标 --target=/usr/local/lib/site-packages/ 安装它但没有帮助之后。
  3. 我尝试将完整的site-packages/ 上的ACL 更改为rwx 用于 www-data 但效果不佳。

到底:最简单的pip install包可以被包括www-data在内的所有用户使用?

【问题讨论】:

  • 补充一点:今天我会完全不同:1)我不会从 PHP 调用 python 脚本,而是创建一个小型 python 应用程序(例如使用flask)并将其部署为一个wsgi app 2)后一种方式完美支持pipenv/自带包环境的虚拟环境。

标签: php python apache shell pip


【解决方案1】:

我建议您尝试 xotihcan 首先发布的解决方案,因为这是让所有用户(包括 www-data)都可以使用 大多数 python 模块的简单方法。但是它不适用于 每个 python 模块。如果这对您不起作用,或者您只想为 www-data 用户安装模块,请使用以下命令:

sudo mkdir /var/www/.local
sudo mkdir /var/www/.cache
sudo chown www-data.www-data /var/www/.local
sudo chown www-data.www-data /var/www/.cache
sudo -H -u www-data pip install CoolProp

我在尝试使 Python pyro4 模块可用于 www-data 时遇到了同样的问题。还有另一种方法可以做到这一点,但它涉及一些更肮脏的黑客行为。有关更多详细信息,请查看我的问题/答案@How do I properly call a Python Pyro client using PHP and Apache web server?

【讨论】:

    【解决方案2】:

    以 root 用户运行 PIP。

    这应该可以解决问题。

    【讨论】:

    • 不,不起作用。这可能会为用户 root 安装模块,但不会为其他任何人安装模块。
    • @infinigrove 你试过了吗?因为这不是 pip 的工作方式。当以 root 身份运行时,它将模块安装在系统 site-packages 目录中,使任何使用该 Python 安装的人都可以访问它,除非您指定 --user 选项。
    • @David Z 我刚刚为 CoolProp 模块尝试了它,我的不好,在这种情况下它确实有效。但是,就我的 pyro4 而言,它不起作用。很有趣。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 2014-08-29
    • 2014-02-15
    相关资源
    最近更新 更多