簡體   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