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__))
.
解决你的问题的方法是首先卸载模块(你可以简单地删除整个树作为根)。
接下来,作为您的普通用户,创建一个虚拟环境并安装您的包。这将确保:
- 您的包未安装在全局 Python 包存储库中。
- 您的包的文件归您的普通用户帐户所有。
- 无需使用提升权限(如 sudo)即可正确执行任何文件级操作。
现在,如果您需要创建这些目录作为包设置过程的一部分,那么您需要修改 setup.py
。
我通过 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__))
.
解决你的问题的方法是首先卸载模块(你可以简单地删除整个树作为根)。
接下来,作为您的普通用户,创建一个虚拟环境并安装您的包。这将确保:
- 您的包未安装在全局 Python 包存储库中。
- 您的包的文件归您的普通用户帐户所有。
- 无需使用提升权限(如 sudo)即可正确执行任何文件级操作。
现在,如果您需要创建这些目录作为包设置过程的一部分,那么您需要修改 setup.py
。