运行时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社区编辑,所以我最终下载了两次软件包,一次只是为了让编辑器识别它,另一次是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 所有,普通用户(流浪者)无法访问。
若要解决此问题,应将 shell 预配选项"特权"设置为 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 文件系统而不是主机文件系统中创建虚拟环境可以解决此问题。您可以使用以浪者文件。我对此进行了测试,我可以安装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>