繁体   English   中英

python3.9 venv 中缺少日历模块

[英]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']

当然还有文档: https://docs.python.org/3/library/calendar.html

日历应该随附 Python。看起来您正在正确激活虚拟环境。 它并没有抛出一个错误,指出没有日历模块,它只是说它没有属性monthlen 我的猜测是,您尝试运行的文件可能名为calendar.py或者它周围的文件名为 calendar.py,因此它正在导入该文件而不是内置模块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM