首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Vagrant中安装django-cron时被拒绝的权限

在Vagrant中安装django-cron时被拒绝的权限
EN

Stack Overflow用户
提问于 2020-08-17 08:47:29
回答 3查看 1.1K关注 0票数 0

在运行pip install django-cron时,我得到以下错误:

代码语言:javascript
复制
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,则会得到一个不同的错误:

代码语言:javascript
复制
ERROR: Can not perform a '--user' install. User site-packages are not visible in this virtualenv.

我的静脉被激活了。

当我以前尝试安装库时,一切都正常,如果我使用sudo命令,就会收到以下警告:

代码语言:javascript
复制
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文件的访问,任何帮助都将不胜感激。

我只得到django-crondjango-crontab模块的错误,但是可以成功地安装其他模块,比如pillow

编辑4:我的设置有点简陋,因为我使用的是Vagrant,但是我有PyCharm社区编辑,所以我最终下载了两次包,一次是为了让编辑器识别它,另一次是为了我运行程序的Vagrant,当我在PyCharm中这样做时,它在PyCharm中工作。

这是我使用的Vagrantfile

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-24 10:35:45

默认情况下,作为root执行。因为您在提供过程中创建了虚拟环境,所以目录是由root拥有的,对于普通用户(迷航者)来说是不可访问的。

要解决这个问题,您应该将shell供应选项“特权”设置为false。

更改这一行:

代码语言:javascript
复制
config.vm.provision "shell", inline: <<-SHELL

至:

代码语言:javascript
复制
config.vm.provision "shell", privileged: false, inline: <<-SHELL

或者,,您可以修改您的配置脚本,以便使用以下命令作为流浪者用户运行virtualenv命令:

代码语言:javascript
复制
sudo -u vagrant virtualenv -p /usr/bin/python3 .venv --always-copy

更新:

虽然上述情况通常是正确的,但在您的情况下,这并不是问题的原因,因为您在/vagrant中安装了虚拟环境,这是主机上目录(存储Vagrantfile的目录)的虚拟挂载。正常的文件权限不适用于此目录,或者至少不以通常的方式应用。

django-crondjango-crontab模块似乎对这个挂载有问题,不管是什么原因(可能是一个bug)。

在VM文件系统内而不是在主机文件系统中创建虚拟环境解决了这个问题。您可以使用以下Vagrantfile文件。我对此进行了测试,可以安装django-cron,而不会出现错误。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2020-08-17 08:51:16

当您没有对/vagrant/.venv文件夹的写访问权限时,通常会发生这种情况。您可以使用ls -l cmd检查访问。

如果是这样,您应该更改对/vagrant/.venv文件夹的访问权限。

票数 1
EN

Stack Overflow用户

发布于 2020-08-17 09:20:40

只需尝试在cmd中使用pip命令即可。

代码语言:javascript
复制
pip install <packagename>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63447532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档