我正在使用 rembg,它可以在我的本地计算机上运行,但在生产中会引发错误。所以我认为这与linux操作系统目录权限有关。
这是服务器的完整日志:
Traceback (most recent call last):
File "/home/airnet-technologies-test-bgrm/htdocs/test-bgrm.airnet-technologies.com/venv/lib/python3.10/site-packages/pooch/utils.py", line 249, in make_local_storage
os.makedirs(path, exist_ok=True)
File "/usr/lib/python3.10/os.py", line 225, in makedirs
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/root/.u2net'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/path/to/dir/venv/lib/python3.10/site-packages/flask/app.py", line 1473, in wsgi_app
response = self.full_dispatch_request()
File "/home/path/to/dir/venv/lib/python3.10/site-packages/flask/app.py", line 882, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/path/to/dir/venv/lib/python3.10/site-packages/flask/app.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
File "/home/path/to/dir/venv/lib/python3.10/site-packages/flask/app.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
File "/home/path/to/dir/app.py", line 69, in remove_background
output = remove(input)
File "/home/path/to/dir/venv/lib/python3.10/site-packages/rembg/bg.py", line 133, in remove
session = new_session("u2net")
File "/home/path/to/dir/venv/lib/python3.10/site-packages/rembg/session_factory.py", line 50, in new_session
pooch.retrieve(
File "/home/path/to/dir/venv/lib/python3.10/site-packages/pooch/core.py", line 224, in retrieve
make_local_storage(path)
File "/home/path/to/dir/venv/lib/python3.10/site-packages/pooch/utils.py", line 264, in make_local_storage
raise PermissionError(" ".join(message)) from error
PermissionError: [Errno 13] Permission denied: '/root/.u2net' | Pooch could not create data cache folder '/root/.u2net'. Will not be able to download data files.
[pid: 219913|app: 0|req: 1/1] 182.180.15.244 () {44 vars in 853 bytes} [Sat Jul 20 14:06:45 2024] POST /remove_background => generated 265 bytes in 19 msecs (HTTP/1.1 500) 2 headers in 99 bytes (2 switches on core 0)
我已经尝试修改.u2net目录的权限,但它不起作用。
这个错误信息表示的应用程序试图在
/root/.u2net
目录下创建文件或文件夹,但它没有权限这样做。
原因分析:
-
权限问题:
/root
目录通常是 root 用户的 home 目录,而的应用程序很可能不是以 root 用户身份运行的。因此,它没有权限在该目录下创建文件或文件夹。 -
rembg 配置:
rembg 库默认尝试在
/root/.u2net
目录下存储模型文件。
解决方法:
可以尝试以下几种方法来解决这个问题:
-
更改 rembg 数据目录:
-
可以通过设置
MODEL_CACHE_DIR
环境变量来更改 rembg 用于存储模型文件的目录。python import os os.environ['MODEL_CACHE_DIR'] = '/path/to/your/data/directory'
将/path/to/your/data/directory
替换为希望使用的目录,并确保的应用程序对该目录具有写入权限。 -
修改目录权限 (不推荐):
-
可以尝试修改
/root/.u2net
目录的权限,以便的应用程序可以写入该目录。 但是,不建议这样做,因为这会带来安全风险。bash sudo chown -R www-data:www-data /root/.u2net
将www-data
替换为的应用程序运行的用户。 -
以 root 用户身份运行应用程序 (非常不推荐):
-
强烈建议不要以 root 用户身份运行应用程序,因为这会带来严重的安全风险。 如果必须这样做,请确保了解风险并采取了必要的预防措施。
最佳实践:
-
不要在
/root
目录下存储应用程序数据。 最好在/var/lib
、/usr/local/share
或/opt
等目录下创建专门用于存储应用程序数据的目录。 - 使用虚拟环境: 使用虚拟环境可以隔离应用程序的依赖项,并避免与系统上安装的其他 Python 包发生冲突。
- 使用进程管理工具: 使用进程管理工具(例如 systemd 或 supervisord)来管理的应用程序,可以更轻松地控制应用程序的用户和权限。
希望这些信息能帮到!
标签:python,linux,rembg From: 78772985