PermissionError:[Errno 13]权限被拒绝:' Pipfile'用于pipenv安装请求

时间:2017-09-07 11:30:01

标签: python pip

我试图在pipenv和virtualenv上遵循本指南:http://docs.python-guide.org/en/latest/dev/virtualenvs/。问题是,我在尝试$ pipenv install requests时遇到问题(我认为应该是$python3 -m pipenv install requests,因为简单地pipenv会返回未找到的命令。)

为什么许可被拒绝?

我是一个终端菜鸟,所以请耐心等待。

$ pip3 install --user pipenv

$ python3 -m pipenv

Usage: __main__.py [OPTIONS] COMMAND [ARGS]...

$ python3 -m pipenv install requests

Creating a Pipfile for this project...
Traceback (most recent call last):
  File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/Users/sahandzarrinkoub/Library/Python/3.6/lib/python/site-packages/pipenv/__main__.py", line 4, in <module>
    cli()
  File "/Users/sahandzarrinkoub/Library/Python/3.6/lib/python/site-packages/pipenv/vendor/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/Users/sahandzarrinkoub/Library/Python/3.6/lib/python/site-packages/pipenv/vendor/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/Users/sahandzarrinkoub/Library/Python/3.6/lib/python/site-packages/pipenv/vendor/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/sahandzarrinkoub/Library/Python/3.6/lib/python/site-packages/pipenv/vendor/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/sahandzarrinkoub/Library/Python/3.6/lib/python/site-packages/pipenv/vendor/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/Users/sahandzarrinkoub/Library/Python/3.6/lib/python/site-packages/pipenv/cli.py", line 895, in install
    ensure_project(three=three, python=python)
  File "/Users/sahandzarrinkoub/Library/Python/3.6/lib/python/site-packages/pipenv/cli.py", line 180, in ensure_project
    ensure_pipfile(validate=validate)
  File "/Users/sahandzarrinkoub/Library/Python/3.6/lib/python/site-packages/pipenv/cli.py", line 141, in ensure_pipfile
    project.create_pipfile()
  File "/Users/sahandzarrinkoub/Library/Python/3.6/lib/python/site-packages/pipenv/project.py", line 219, in create_pipfile
    self.write_toml(data, 'Pipfile')
  File "/Users/sahandzarrinkoub/Library/Python/3.6/lib/python/site-packages/pipenv/project.py", line 226, in write_toml
    with open(path, 'w') as f:
PermissionError: [Errno 13] Permission denied: 'Pipfile'

3 个答案:

答案 0 :(得分:3)

确保您已将UserBase的bin目录添加到路径中(请按照您所关注的documentation处的注释框查看如何执行此操作。)

您提到的第三个命令应该是:pipenv install requests

更长的版本:

我会更深入地了解一些命令行概念,因为您已经开始使用命令行(以及其他想要更深入参考的人)。

您显示三个命令:

  • pip3 install --user pipenv
    • 这是完美的,在安装pipenv作为用户包(不适用于整个系统)
  • python3 -m pipenv
    • 这没有任何作用。您看到的内容是“Usage message”。它说这个命令需要一些main.py程序,选项(可选,因为在括号中),命令(必需)和可能更多的参数。如果您看到使用消息,则表示您没有按照作者的意图调用该程序。
  • python3 -m pipenv install requests
    • 这应该是pipenv install requests。但是在你将UserBase的bin添加到你的路径之后它才会起作用(你会得到pipenv: command not found错误。)

您的PATH是您的shell将搜索您列出的命令的位置。请参阅更改Mac or LinuxWindows上的路径。

正如你提到的documentation提到的那样,你想要运行python3 -m site,你会得到如下输出:

$ python -m site
  .
  .
  .
USER_BASE: '/Users/<myusername>/Library/Python/3.6' (exists)
USER_SITE: '/Users/<myusername>/Library/Python/3.6/lib/python/site-packages' (exists)
ENABLE_USER_SITE: True

现在您知道USER_BASE的位置,在末尾添加/bin并将其添加到您的路径中。再次查看操作系统特定说明,但在OSX上,您可以将export PATH="$PATH:/Users/<myusername>/Library/Python/3.6/bin添加到~/.profile,运行source ~/.profile,然后您的shell将在您输入命令pipenv时搜索该目录。

答案 1 :(得分:0)

我有同样的症状:

with open(path, 'w') as f:
PermissionError: [Errno 13] Permission denied: 'Pipfile'

问题是我在其中一个父目录中有Pipfile并且具有不同的权限(在我的情况下,由root在实验时创建)。删除此Pipfile解决了这个问题。我们讨论了同样的问题Pipenv issue

更多详细信息:在尝试安装/创建新的虚拟环境时,pipenv会查看所有父目录,以查看其中是否已存在Pipfile。如果有Pipfile,并且使用不同的权限创建(例如,在我的情况下通过root sudo下),则pipenv将无权写入此Pipfile,创建一个有点不清楚的错误消息。

告诉故事是pipenv --where打印的目录名不同于您所期望的(或者在您创建新环境而不是&#34时打印目录路径;否pipfile出现在项目主页......&#34;)

答案 2 :(得分:-1)

Pipfile的权限被拒绝,因为要创建Pipfile的目录没有写权限。例如做这样的事情

sudo chmod 775项目