如何在 CentOS 服务器上授予其他用户访问虚拟环境的权限
How to grant access to virtual environment to other users on CentOS server
我使用了本教程(GoDaddy 推荐,因为我有 GoDaddy VPS)
https://www.godaddy.com/garage/how-to-install-and-configure-python-on-a-hosted-server/
安装 Python (3.6.6) 的次要版本,并使用 Python 的次要版本为 运行 模块创建虚拟环境。我希望能够在虚拟环境中 运行 脚本,但不想总是使用管理员帐户来执行此操作。我设置了另一个没有管理员权限的帐户。有没有办法将权限扩展到创建它的管理员帐户之外?我是否需要在每个将有权访问 运行 python 的用户帐户上创建一个虚拟环境?
它说要在 bash_profile 脚本中添加一行。脚本已经有这个:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
这是有道理的,因为它似乎定义了基础 Python(即 2.6.6)的位置。我在 venv
中有模块需要 3.4+,所以我创建了虚拟环境。对于某些脚本,我希望能够从 Chrome 和 运行 调用脚本,对于其他脚本,我希望能够从 cronjob 调用 运行 脚本,并且脚本需要始终指向 virtualenv 才能使用它安装的解释器。我不知道如何正确地做到这一点。这是我的系统信息和一些 SSH 打印输出的结果:
$ cd $PATH
-bash: cd: /home/flohosti/.local/bin:/home/flohosti/perl5/bin:/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/cpanel/composer/bin: No such file or directory
在进入 VirtualEnv 之前,我 运行 which python
得到了我预期的 /usr/bin/python。
有多种方法可以做到这一点。
您可以简单地授予对安装虚拟环境的目录的读取权限,然后在 /etc/profile
中导出其路径,以便它自动添加到每个用户路径中。
或者您可以访问虚拟环境文件夹中的 python 二进制文件。
也就是说这不是解决问题的正确方法,大多数时候你会希望在你的 projet 文件夹中有一个虚拟环境,这样它就可以自动用于项目以及谁可以访问那个项目。
编辑 1
所以你评论的答案
是的,您绝对可以使用相同的虚拟环境在 cron
中执行脚本,但是您必须在 cron 中提供虚拟环境和脚本的绝对路径,例如 /home/flohosti/projectOne/env/bin/python <script path>
或者您可以设置cron 中的 PATH
然后你也可以使用相对路径。
我使用了本教程(GoDaddy 推荐,因为我有 GoDaddy VPS)
https://www.godaddy.com/garage/how-to-install-and-configure-python-on-a-hosted-server/
安装 Python (3.6.6) 的次要版本,并使用 Python 的次要版本为 运行 模块创建虚拟环境。我希望能够在虚拟环境中 运行 脚本,但不想总是使用管理员帐户来执行此操作。我设置了另一个没有管理员权限的帐户。有没有办法将权限扩展到创建它的管理员帐户之外?我是否需要在每个将有权访问 运行 python 的用户帐户上创建一个虚拟环境?
它说要在 bash_profile 脚本中添加一行。脚本已经有这个:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
这是有道理的,因为它似乎定义了基础 Python(即 2.6.6)的位置。我在 venv
中有模块需要 3.4+,所以我创建了虚拟环境。对于某些脚本,我希望能够从 Chrome 和 运行 调用脚本,对于其他脚本,我希望能够从 cronjob 调用 运行 脚本,并且脚本需要始终指向 virtualenv 才能使用它安装的解释器。我不知道如何正确地做到这一点。这是我的系统信息和一些 SSH 打印输出的结果:
$ cd $PATH
-bash: cd: /home/flohosti/.local/bin:/home/flohosti/perl5/bin:/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/cpanel/composer/bin: No such file or directory
在进入 VirtualEnv 之前,我 运行 which python
得到了我预期的 /usr/bin/python。
有多种方法可以做到这一点。
您可以简单地授予对安装虚拟环境的目录的读取权限,然后在 /etc/profile
中导出其路径,以便它自动添加到每个用户路径中。
或者您可以访问虚拟环境文件夹中的 python 二进制文件。
也就是说这不是解决问题的正确方法,大多数时候你会希望在你的 projet 文件夹中有一个虚拟环境,这样它就可以自动用于项目以及谁可以访问那个项目。
编辑 1
所以你评论的答案
是的,您绝对可以使用相同的虚拟环境在 cron
中执行脚本,但是您必须在 cron 中提供虚拟环境和脚本的绝对路径,例如 /home/flohosti/projectOne/env/bin/python <script path>
或者您可以设置cron 中的 PATH
然后你也可以使用相对路径。