簡體   English   中英

在 Vagrant 中安裝 django-cron 時權限被拒絕

[英]Permission denied while installing django-cron in Vagrant

運行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-crondjango-crontab的此錯誤,但其他模塊(如pillow )可以成功安裝。

編輯 4:我的設置有點笨拙,因為我使用的是 Vagrant,但我有 PyCharm 社區編輯,所以我最終下載了兩次包,一次只是為了讓編輯器識別它,然后再一次運行 ZC87D9C39C2F53C71B7 程序,當我在 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 所有,普通用戶 (vagrant) 無法訪問。

要解決此問題,您應該將 shell 配置選項“特權”設置為 false。

更改此行:

config.vm.provision "shell", inline: <<-SHELL

至:

config.vm.provision "shell", privileged: false, inline: <<-SHELL

或者,您可以修改您的配置腳本以使用以下命令以 vagrant 用戶身份運行virtualenv命令:

sudo -u vagrant virtualenv -p /usr/bin/python3 .venv --always-copy

更新:

盡管上述情況通常是正確的,但這不是您的問題的原因,因為您在/vagrant中安裝了虛擬環境,這是主機上目錄的虛擬掛載(存儲Vagrantfile的目錄)。 普通文件權限不適用於此目錄,或者至少不是以通常的方式。

無論出於何種原因,Python 模塊django-crondjango-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

當您沒有對/vagrant/.venv文件夾的寫入權限時,通常會發生這種情況。 您可以使用ls -l cmd 檢查訪問權限。

如果是這樣,您應該更改您對/vagrant/.venv文件夾的訪問權限。

只需嘗試在 cmd 中使用 pip 命令

pip install <packagename>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM