[英]Missing calendar module in python3.9 venv
我正在尝试在 python3.9 virtualenv 中运行一个 python 应用程序。 但我收到以下错误:
AttributeError: module 'calendar' has no attribute 'monthlen'
这是我设置环境的方式:
sudo apt install python3.9-venv
python3.9 -m venv .venv/
source .venv/bin/activate
我可以看到“日历”模块没有从虚拟环境中加载。 相反,它是从系统 python 安装加载的:
>>> import calendar
>>> print(calendar.__file__)
/usr/lib/python3.9/calendar.py
>>>
看起来“日历”模块应该是 python 安装的一部分,但在虚拟环境中不存在(无法在虚拟环境中找到名称包含“日历”的任何文件)并且无法通过 pip 获得。我怎么能获取日历模块和我以后可能需要的任何其他标准内置模块?
calendar.monthlen
是一个未记录的 Python 3.7 function,在 Python 3.8 之后已重命名为calendar._monthlen
以通知您它是一个“私有”function,您不应该依赖它。
代码实际上只是:
def _monthlen(year, month):
return mdays[month] + (month == February and isleap(year))
这也基本相同
calendar.monthrange(year, month)[1]
plus monthrange
检查month
是否为有效值。
因此,我建议您制作自己的 function,它的功能完全相同,而不是使用“私有”函数。
您始终可以使用dir(module)
检查可用的内容,例如dir(calendar)
:
['Calendar',
'EPOCH',
'FRIDAY',
'February',
'HTMLCalendar',
'IllegalMonthError',
'IllegalWeekdayError',
'January',
'LocaleHTMLCalendar',
'LocaleTextCalendar',
'MONDAY',
'SATURDAY',
'SUNDAY',
'THURSDAY',
'TUESDAY',
'TextCalendar',
'WEDNESDAY',
'_EPOCH_ORD',
'__all__',
'__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'_colwidth',
'_locale',
'_localized_day',
'_localized_month',
'_monthlen',
'_nextmonth',
'_prevmonth',
'_spacing',
'c',
'calendar',
'datetime',
'day_abbr',
'day_name',
'different_locale',
'error',
'firstweekday',
'format',
'formatstring',
'isleap',
'leapdays',
'main',
'mdays',
'month',
'month_abbr',
'month_name',
'monthcalendar',
'monthrange',
'prcal',
'prmonth',
'prweek',
'repeat',
'setfirstweekday',
'sys',
'timegm',
'week',
'weekday',
'weekheader']
日历应该随附 Python。看起来您正在正确激活虚拟环境。 它并没有抛出一个错误,指出没有日历模块,它只是说它没有属性monthlen
。 我的猜测是,您尝试运行的文件可能名为calendar.py或者它周围的文件名为 calendar.py,因此它正在导入该文件而不是内置模块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.