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