因此,我收到以下错误:TypeError: join() argument must be str or bytes, not 'PosixPath'
当我在Ubuntu 16.04上检查Django安装时发生了这个错误。完整的错误是:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
File "/usr/lib/python3.5/posixpath.py", line 89, in join
genericpath._check_arg_types('join', a, *p)
File "/usr/lib/python3.5/genericpath.py", line 143, in _check_arg_types
(funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'PosixPath'
这来自settings.py文件。
在我的文件中:
from pathlib import Path
import os
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
...
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
在我的开发环境中,它正在工作并运行它,但在这里我收到了错误。生产环境中的Python版本是3.5.1-3。通常情况下,软件包也应该安装相同的版本(pip freeze/install -r)。
有人有办法把我推向正确的方向吗?
先谢谢你,
4条答案
按热度按时间46qrfjad1#
只使用
pathlib
库会使这变得容易得多:PosixPath提供了更多的自由来指定,例如,仅指定文件名或文件列表。最终,您可以始终将PosixPath转换为字符串:
3vpjnl9f2#
所以这里的问题是你的
BASE_DIR
是一个pathlib Path,而os.path.join通常使用字符串。我会使用纯pathlib,如下所示:这让pathlib处理路径连接,并且碰巧更简单,更容易阅读(观点)。
**编辑:**只是想补充一下,从python 3.6开始,os.path.join应该处理所有类似路径的对象,这就是为什么它可以在某些环境中工作-请参阅文档:https://docs.python.org/3/library/os.path.html#os.path.join
0qx6xfy63#
1.使用pathlib库的**joinpath()函数。
1.然后使用str()**函数作为:-
str(BASE_DIR.joinpath('db.sqlite3'))
pcww981p4#
这是因为Path(file).resolve().parent.parent返回一个对象。但是对于'join'函数需要一个字符特灵,因此更改:
致: