上下文
我正在尝试构建一个使用此程序包的Django应用程序:django-minio-storage。 我正在尝试使用以下类扩展包中的某个类:
@deconstructible
class MinioStoreStorage(MinioStorage):
def __init__(self, bucket_name):
client = create_minio_client_from_settings()
base_url = bucket_name
# base_url = get_setting("MINIO_STORAGE_STATIC_URL", None)
bucket_name = bucket_name
auto_create_bucket = True
presign_urls = True
super(MinioStoreStorage, self).__init__(
client,
bucket_name,
auto_create_bucket=auto_create_bucket,
base_url=base_url,
presign_urls=presign_urls
)
问题:
我无法导入函数create_minio_client_from_settings
。
此函数驻留在包的文件storage.py
中。存在类MinioStorage
的同一文件。
我还可以成功导入同一文件中的另一个函数(get_setting
)并使用它没有问题,但尝试对create_minio_client_from_settings
执行相同操作会引发ImportError
。
以下是我正在使用的导入内容:
from minio_storage.storage import get_setting
# Succeeds
from minio_storage.storage import create_minio_client_from_settings
Traceback (most recent call last):
File "<console>", line 1, in <module>
ImportError: cannot import name 'create_minio_client_from_settings'
storage.py
以下是该软件包代码的片段:
@deconstructible
class MinioStorage(Storage):
"""An implementation of Django's file storage using the minio client.
The implementation should comply with
https://docs.djangoproject.com/en/dev/ref/files/storage/.
"""
...
...
...
def get_setting(name, default=_NoValue, ):
result = getattr(settings, name, default)
if result is _NoValue:
print("Attr {} : {}".format(name, getattr(settings, name, default)))
raise ImproperlyConfigured
else:
return result
def create_minio_client_from_settings():
endpoint = get_setting("MINIO_STORAGE_ENDPOINT")
access_key = get_setting("MINIO_STORAGE_ACCESS_KEY")
secret_key = get_setting("MINIO_STORAGE_SECRET_KEY")
secure = get_setting("MINIO_STORAGE_USE_HTTPS", True)
client = minio.Minio(endpoint,
access_key=access_key,
secret_key=secret_key,
secure=secure)
return client
问题:
进一步调查:
我一直在研究这个问题,这里有一些评论和更可重复的方法来看待异常。
在创建Django项目并安装有问题的软件包之后,我使用:python manage.py shell
启动了shell并使用了以下命令:
>>> import minio_storage
>>> dir(minio_storage)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 'storage']
>>> help(minio_storage.storage)
help(minio_storage.storage)
将显示一个手册页,其中描述了程序包提供的类和函数。在功能类别下,只有一个功能可用,它是get_setting()
功能。
create_minio_client_from_settings()
的显示方式与get_setting()
的显示方式不同?版本和依赖项
以下是命令的结果:pipenv graph
django-minio-storage==0.1.0
- django [required: >=1.9, installed: 1.11.6]
- pytz [required: Any, installed: 2017.2]
- minio [required: >=1.0.2, installed: 2.2.5]
- certifi [required: Any, installed: 2017.7.27.1]
- pytz [required: Any, installed: 2017.2]
- urllib3 [required: Any, installed: 1.22]
djangorestframework==3.7.1
flake8==3.5.0
- mccabe [required: >=0.6.0,<0.7.0, installed: 0.6.1]
- pycodestyle [required: >=2.0.0,<2.4.0, installed: 2.3.1]
- pyflakes [required: >=1.5.0,<1.7.0, installed: 1.6.0]
Pillow==4.3.0
- olefile [required: Any, installed: 0.44]
答案 0 :(得分:2)
你的var execTimes = Daily[tmp];
if (execTimes != null) {
var nextTime = execTimes.OrderBy(x => x).FirstOrDefault(x => x > t);
if (nextTime != default(TimeSpan)) {
// do something...
}
}
软件包已经过时了,但这不是你的错 - 在撰写本文时,PyPi软件包本身已经过时了。
您正在运行的版本不包含您正在寻找的功能。从GitHub下载该软件包的源代码,然后从那里运行它 - 您将获得所需的行为:https://github.com/py-pa/django-minio-storage
答案 1 :(得分:-1)
<强> 解决 强>
正如用户souldeux指出的那样,我的包裹已经过时了。我使用pipenv安装它,它不是与最新版本匹配的版本。我一边是在处理我过时的软件包,另一边是github的新代码。
他提供的链接很有用,但我结束了使用另一个SO answer直接从github安装包。更具体地说,在我的情况下:
pipenv install git+https://github.com/py-pa/django-minio-storage.git#egg=django-minio-storage