【问题标题】:PermissionError: [Errno 13] Permission denied: 'Pipfile' for pipenv install requestsPermissionError: [Errno 13] Permission denied: 'Pipfile' for pipenv install requests
【发布时间】:2017-09-07 11:30:01
【问题描述】:

我正在尝试遵循有关 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'

【问题讨论】:

  • 试试sudo
  • 我听说这是不好的做法。
  • 你试过apt-get install python-YourPackage
  • @Sandi sudo 以 root 模式运行应用程序。您可以使用sudo,除非您知道自己在做什么。否则,可能会损坏内核。
  • 我不知道自己在做什么,所以使用sudo 感觉是个坏主意。如果您认为在这种情况下没问题,我很乐意知道原因。

标签: python pip


【解决方案1】:

确保您已将 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 并将其添加到您的 PATH 中。再次查看操作系统特定说明,但在 OSX 上,您可以将 export PATH="$PATH:/Users/&lt;myusername&gt;/Library/Python/3.6/bin 添加到您的 ~/.profile,运行 source ~/.profile,当您输入命令 pipenv 时,您的 shell 现在将搜索该目录。

【讨论】:

    【解决方案2】:

    我有同样的症状:

    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 打印的目录名称与您预期的不同(或在您刚刚创建新环境时打印目录路径,而不是“项目主目录中不存在 pipfile...” )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-17
      • 2017-02-12
      • 1970-01-01
      • 2019-07-31
      • 2019-11-27
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多