Python 我可以使用VirtualEnv安装一些附加软件包吗?

Python 我可以使用VirtualEnv安装一些附加软件包吗?,python,django,virtualenv,Python,Django,Virtualenv,如果我正在使用Python和其他一些软件包(如virtualenv)开发一个共享web服务器。我可以使用virtualenv在特定目录中安装我需要的一些附加软件包,同时仍然使用系统范围的python和软件包吗?或者更好的是,我可以只在我自己的目录中安装附加的python软件包,并在我的网站上使用它们,而不需要sudo权限吗?您可以明确地包括所有全局安装的软件包使用-system-site-packages开关在virtualenv中安装软件包: 授予对虚拟环境的全局站点包目录的访问权限 或者使用

如果我正在使用Python和其他一些软件包(如virtualenv)开发一个共享web服务器。我可以使用virtualenv在特定目录中安装我需要的一些附加软件包,同时仍然使用系统范围的python和软件包吗?或者更好的是,我可以只在我自己的目录中安装附加的python软件包,并在我的网站上使用它们,而不需要sudo权限吗?

您可以明确地包括所有全局安装的软件包使用-system-site-packages开关在virtualenv中安装软件包:

授予对虚拟环境的全局站点包目录的访问权限

或者使用-no site packages开关禁用全局站点包:

不向虚拟环境授予对全局站点包目录的访问权限

后者目前是默认值

我个人在我的全球网站包中安装了lxml,因此我们可以将其作为一个小型演示:


您可以使用-system site packages开关将所有全局安装的软件包显式包含在virtualenv中:

授予对虚拟环境的全局站点包目录的访问权限

或者使用-no site packages开关禁用全局站点包:

不向虚拟环境授予对全局站点包目录的访问权限

后者目前是默认值

我个人在我的全球网站包中安装了lxml,因此我们可以将其作为一个小型演示:


向名为lib的$HOME添加一个目录向名为python的$HOME添加一个目录

将新目录添加到路径/pythonpath.bashrc和.bash\u配置文件中

nano~/.bashrc然后添加export PYTHONPATH=$PYTHONPATH:~/lib/python,这将在不通过shell(例如通过网站)访问时设置您的环境

将同一行添加到.bash_配置文件中,这将在您通过shell登录时控制您的环境

注销终端并重新登录

echo$PYTHONPATH以确保它有您的~/lib/python文件夹

使用wget下载所需的python包https://download 或git克隆包/repo

如果您下载了一个zip文件,请解压缩它tar-xvf somefile.tar.bz

更改到解压它的目录

光盘包\

使用-HOME标记运行setup.py

python setup.py安装-主页=~

测试一下

python-c导入;印刷版

祝贺您刚刚安装了自定义软件包:


另一方面,我发现virtualenv是一个更加健壮的解决方案,但有时很难正确设置。如果您只需要几个自定义软件包,就可以实现这一点。

向$HOME添加一个名为lib的目录向名为python的目录添加一个目录

将新目录添加到路径/pythonpath.bashrc和.bash\u配置文件中

nano~/.bashrc然后添加export PYTHONPATH=$PYTHONPATH:~/lib/python,这将在不通过shell(例如通过网站)访问时设置您的环境

将同一行添加到.bash_配置文件中,这将在您通过shell登录时控制您的环境

注销终端并重新登录

echo$PYTHONPATH以确保它有您的~/lib/python文件夹

使用wget下载所需的python包https://download 或git克隆包/repo

如果您下载了一个zip文件,请解压缩它tar-xvf somefile.tar.bz

更改到解压它的目录

光盘包\

使用-HOME标记运行setup.py

python setup.py安装-主页=~

测试一下

python-c导入;印刷版

祝贺您刚刚安装了自定义软件包:


另一方面,我发现virtualenv是一个更加健壮的解决方案,但有时很难正确设置。如果您只需要几个自定义软件包,则可以使用此功能。

此外,您还可以将所需的软件包复制到您拥有权限的目录中。然后在_init__u; py.py中,您应该这样修改python路径:

import sys
sys.path.append("/path/to/the_dir/with_packages")

此外,您还可以将所需的软件包复制到您拥有权限的目录中。然后在_init__u; py.py中,您应该这样修改python路径:

import sys
sys.path.append("/path/to/the_dir/with_packages")

这意味着我应该控制全局站点包。我是否正确地假设它们只是指从那里可用的包中读取权限?我想有两个网站包——一个是全局的,我可以阅读,一个是本地的,我可以写。@iamrhitbanga:没错;当您使用-system站点软件包创建virtualenv时,您将获得一个本地virtualenv,您可以在其中安装新软件包。在virtualenv内部使用python时,全局站点包仍然可用,您可以从中导入,但是你不会向它写信。如果我的virtualenv版本不支持此选项,并且很难更新它,我该怎么办?@iamrhitbanga:在早期版本中,默认情况是不排除全局站点包目录,并且你
广告使用-没有网站包开关,而是防止。哦。。。我懂了。。。我还想我可以下载virtualenv最新的脚本并将其下载到我的目录中。还有一个问题。与实际的系统站点包同步怎么样?当我运行脚本时,我会得到一份系统站点包的副本,但是如果系统范围内有可用的升级或新包怎么办?这意味着我应该控制全局站点包。我是否正确地假设它们只是指从那里可用的包中读取权限?我想有两个网站包——一个是全局的,我可以阅读,一个是本地的,我可以写。@iamrhitbanga:没错;当您使用-system站点软件包创建virtualenv时,您将获得一个本地virtualenv,您可以在其中安装新软件包。在virtualenv内部使用python时,全局站点包仍然可用,您可以从中导入,但是你不会写信给它。如果我的virtualenv版本不支持此选项,并且很难更新,我该怎么办?@iamrohitbanga:在早期版本中,默认情况是不排除全局站点包目录,而你必须使用-no site packages开关来防止这种情况。哦。。。我懂了。。。我还想我可以下载virtualenv最新的脚本并将其下载到我的目录中。还有一个问题。与实际的系统站点包同步怎么样?当我运行脚本时,我会得到一份系统站点包的副本,但是如果系统范围内有可用的升级或新包怎么办?