mkdir 的权限被拒绝

Permission denied for mkdir

我通过 sudo python setup.py install 在本地安装了 我自己的软件包 。在它的源代码中有导致 OSError: (13, 'Permission denied', '....'):

的代码
curr_dir = os.path.dirname(os.path.realpath(__file__))
    if not os.path.exists(os.path.dirname(os.path.join(curr_dir, "dir1/log1.out"))):
        os.makedirs(os.path.dirname(os.path.join(curr_dir, "dir1/log1.out")))

curr_dir 是:

/usr/local/lib/python2.7/site-packages/my_app-1.2.3-py2.7.egg/my_app

并且:

$ ls -al '/usr/local/lib/python2.7/site-packages/my_app-1.2.3-py2.7.egg/my_app'
total 696
drwxr-xr-x  35 root  admin   1190 Mar 29 12:00 .
drwxr-xr-x   4 root  admin    136 Mar 29 12:00 ..
-rw-r--r--   1 root  admin    108 Mar 29 12:00 __init__.py
-rw-r--r--   1 root  admin    202 Mar 29 12:00 __init__.pyc
-rw-r--r--   1 root  admin  11964 Mar 29 12:00 file1.py
-rw-r--r--   1 root  admin  12953 Mar 29 12:00 file1.pyc
-rw-r--r--   1 root  admin  13424 Mar 29 12:00 file2.py
-rw-r--r--   1 root  admin  15621 Mar 29 12:00 file2.pyc
.....

我该如何解决?

P.S。即使我通过 mkdir 和 touch 手动创建文件 curr_dir, "dir1/log1.out,python 代码在执行时也会抛出相同的异常。

I installed my own package via sudo python setup.py install locally.

一旦你使用了 sudo(你不应该这样做),你的包中包含的所有文件都归 root 所有,因为它的 root 用户是 运行ning setup.py install

现在,当您以普通用户身份尝试 运行 软件包中包含的任何模块时,该模块会尝试 open/modify/read/create 属于软件包本身的任何目录或文件,它会 运行 进入权限问题。你的包的所有文件都归 root 所有,你正试图用你的普通用户 运行 它,并且该用户不能在包的源路径中创建目录(这里提到 os.path.dirname(os.path.realpath(__file__)).

解决你的问题的方法是首先卸载模块(你可以简单地删除整个树作为根)。

接下来,作为您的普通用户,创建一个虚拟环境并安装您的包。这将确保:

  1. 您的包未安装在全局 Python 包存储库中。
  2. 您的包的文件归您的普通用户帐户所有。
  3. 无需使用提升权限(如 sudo)即可正确执行任何文件级操作。

现在,如果您需要创建这些目录作为包设置过程的一部分,那么您需要修改 setup.py