在 Vagrant 中安装 django-cron 时权限被拒绝
Permission denied while installing django-cron in Vagrant
当 运行ning pip install django-cron
我得到以下错误:
ERROR: Error [Errno 13] Permission denied: '/vagrant/.venv/bin/python' while executing command python setup.py egg_info
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/vagrant/.venv/bin/python'
Consider using the `--user` option or check the permissions.
但是,如果我使用 --user
,我会得到一个不同的错误:
ERROR: Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
我的 venv 已激活。
当我之前尝试安装库时,一切正常,如果我使用 sudo 命令,我会收到以下警告:
WARNING: The directory '/home/vagrant/.cache/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
遗憾的是,使用 -H
无法解决问题,我不确定如何更改对 .venv 文件的访问权限,如有任何帮助,我们将不胜感激。
我只收到 Python 模块 django-cron
和 django-crontab
的错误,但可以成功安装 pillow
等其他模块。
编辑 4:
我的设置有点简陋,因为我使用的是 Vagrant,但我有 PyCharm Community Editon,所以我最终下载了两次软件包,一次是为了让编辑器识别它,另一次是 Vagrant,我 运行 程序,当我在 PyCharm 中执行此操作时,它在 PyCharm.
中运行
这是我用的Vagrantfile
:
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-18.04"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get install python3-distutils -y
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3 get-pip.py
rm get-pip.py
sudo pip install virtualenv
cd /vagrant
virtualenv -p /usr/bin/python3 .venv --always-copy
echo "cd /vagrant && source /vagrant/.venv/bin/activate" >> /home/vagrant/.profile
SHELL
end
当您没有 /vagrant/.venv
文件夹的写入权限时,通常会发生这种情况。您可以使用 ls -l
cmd.
检查访问权限
如果是这样,您应该更改对 /vagrant/.venv
文件夹的访问权限。
直接在cmd中使用pip命令试试
pip install <packagename>
默认情况下,Vagrant 配置脚本以 root 身份执行。由于您在配置期间创建了虚拟环境,因此目录归 root 所有,普通用户 (vagrant) 无法访问。
要解决此问题,您应该将 shell 配置选项“特权”设置为 false。
更改此行:
config.vm.provision "shell", inline: <<-SHELL
至:
config.vm.provision "shell", privileged: false, inline: <<-SHELL
或者, 您可以使用以下命令将供应脚本修改为 运行 virtualenv
命令作为 vagrant 用户:
sudo -u vagrant virtualenv -p /usr/bin/python3 .venv --always-copy
更新:
虽然以上内容大体上是正确的,但这并不是你的问题的原因,因为你在 /vagrant
中安装了虚拟环境,它是主机上目录的虚拟挂载( Vagrantfile
的存储目录)。普通文件权限不适用于此目录,或者至少不适用于此目录。
似乎 Python 模块 django-cron
和 django-crontab
这个安装有问题,无论出于何种原因(可能是一个错误)。
在 VM 文件系统而不是主机文件系统中创建虚拟环境可以解决问题。您可以使用以下 Vagrantfile。我对此进行了测试,我可以毫无错误地安装 django-cron
。
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-18.04"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.provision "shell", privileged: false, inline: <<-SHELL
sudo apt-get install python3-distutils -y
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3 get-pip.py
rm get-pip.py
sudo pip install virtualenv
virtualenv -p /usr/bin/python3 /home/vagrant/venv --always-copy
echo "cd /vagrant && source /home/vagrant/venv/bin/activate" >> /home/vagrant/.profile
SHELL
end
当 运行ning pip install django-cron
我得到以下错误:
ERROR: Error [Errno 13] Permission denied: '/vagrant/.venv/bin/python' while executing command python setup.py egg_info
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/vagrant/.venv/bin/python'
Consider using the `--user` option or check the permissions.
但是,如果我使用 --user
,我会得到一个不同的错误:
ERROR: Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
我的 venv 已激活。
当我之前尝试安装库时,一切正常,如果我使用 sudo 命令,我会收到以下警告:
WARNING: The directory '/home/vagrant/.cache/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
遗憾的是,使用 -H
无法解决问题,我不确定如何更改对 .venv 文件的访问权限,如有任何帮助,我们将不胜感激。
我只收到 Python 模块 django-cron
和 django-crontab
的错误,但可以成功安装 pillow
等其他模块。
编辑 4: 我的设置有点简陋,因为我使用的是 Vagrant,但我有 PyCharm Community Editon,所以我最终下载了两次软件包,一次是为了让编辑器识别它,另一次是 Vagrant,我 运行 程序,当我在 PyCharm 中执行此操作时,它在 PyCharm.
中运行这是我用的Vagrantfile
:
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-18.04"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get install python3-distutils -y
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3 get-pip.py
rm get-pip.py
sudo pip install virtualenv
cd /vagrant
virtualenv -p /usr/bin/python3 .venv --always-copy
echo "cd /vagrant && source /vagrant/.venv/bin/activate" >> /home/vagrant/.profile
SHELL
end
当您没有 /vagrant/.venv
文件夹的写入权限时,通常会发生这种情况。您可以使用 ls -l
cmd.
如果是这样,您应该更改对 /vagrant/.venv
文件夹的访问权限。
直接在cmd中使用pip命令试试
pip install <packagename>
默认情况下,Vagrant 配置脚本以 root 身份执行。由于您在配置期间创建了虚拟环境,因此目录归 root 所有,普通用户 (vagrant) 无法访问。
要解决此问题,您应该将 shell 配置选项“特权”设置为 false。
更改此行:
config.vm.provision "shell", inline: <<-SHELL
至:
config.vm.provision "shell", privileged: false, inline: <<-SHELL
或者, 您可以使用以下命令将供应脚本修改为 运行 virtualenv
命令作为 vagrant 用户:
sudo -u vagrant virtualenv -p /usr/bin/python3 .venv --always-copy
更新:
虽然以上内容大体上是正确的,但这并不是你的问题的原因,因为你在 /vagrant
中安装了虚拟环境,它是主机上目录的虚拟挂载( Vagrantfile
的存储目录)。普通文件权限不适用于此目录,或者至少不适用于此目录。
似乎 Python 模块 django-cron
和 django-crontab
这个安装有问题,无论出于何种原因(可能是一个错误)。
在 VM 文件系统而不是主机文件系统中创建虚拟环境可以解决问题。您可以使用以下 Vagrantfile。我对此进行了测试,我可以毫无错误地安装 django-cron
。
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-18.04"
config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.provision "shell", privileged: false, inline: <<-SHELL
sudo apt-get install python3-distutils -y
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3 get-pip.py
rm get-pip.py
sudo pip install virtualenv
virtualenv -p /usr/bin/python3 /home/vagrant/venv --always-copy
echo "cd /vagrant && source /home/vagrant/venv/bin/activate" >> /home/vagrant/.profile
SHELL
end