如何解决在Vagrant中安装django-cron时权限被拒绝
运行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.
我的静脉被激活。
当我以前尝试安装库时,一切正常,如果我使用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设置脚本以root身份执行。由于您在配置过程中创建了虚拟环境,因此目录归root拥有,普通用户(无业)无法访问。
要解决此问题,应将外壳配置选项“特权”设置为false。
更改此行:
config.vm.provision "shell",inline: <<-SHELL
收件人:
config.vm.provision "shell",privileged: false,inline: <<-SHELL
或者,您可以使用以下命令修改配置脚本以以无业游民身份运行virtualenv
命令:
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",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
,
通常,当您无权访问/vagrant/.venv
文件夹时,会发生这种情况。您可以使用ls -l
cmd来检查访问权限。
如果是这样,则应该更改对/vagrant/.venv
文件夹的访问权限。
只需尝试在cmd中使用pip命令
pip install <packagename>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。