← index #8209Issue #5239
Off-topic · high · value 0.178
QUERY · ISSUE

Frozen MPY in fodler are overrided by folder on VFS

openby petrkropened 2022-01-25updated 2022-01-27
py-core

in 1.18 (exact commit do not know) was proabbly changed behavior with FROZEN modules.

Consider situation you frozed few libraries in custom build under some path, like
FROZEN: /utils/foo.mpy

when you go to REPL, you can use it by
import utils.foo

But when you create folder on VFS /utils and upload another library bar.py (or bar.mpy), then foo stop works

>>> import utils.foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: no module named 'utils.foo

in some older revisions this works fine and prioritized search in frozen, then /if not found/ used VFS path.

if '.frozen' and '' are swapped in sys.path, then frozen modules start works, but VFS stop works

CANDIDATE · ISSUE

Build for Pyboard V1.x does not handle frozen modules

closedby peterhinchopened 2019-10-21updated 2019-10-21

This is since the manifest mod. Modules in the stm32/modules directory are cross compiled but they aren't included in the build. For example the build output includes

MPY modules/font10.py

but I can't import it and it doesn't appear in help('modules').
I notice that at the end of the output there is

MPY dht.py
MPY lcd160cr.py
MPY lcd160cr_test.py
MPY onewire.py
GEN build-PYBV10/frozen_content.c
CC build-PYBV10/frozen_content.c

These modules do appear as frozen modules. I suspect that my attempt to override the manifest file works only for Pyboard D.

My build script works on Pyboard D:

MPDEVICE='/dev/pyboard'

# Determine board type
BOARD=$(pyb_check $MPDEVICE)

# Check for user override of frozen directory
if [ $FROZEN_DIR ]
then
    echo Frozen modules located in $FROZEN_DIR
else
    FROZEN_DIR='modules'
fi

if [ $BOARD ]
then
    echo Building for $BOARD
    cd $MPDIR/ports/stm32
    if [ $# -eq 1 ] && [ $1 = "--clean" ]
    then
        make BOARD=$BOARD clean
    fi
    if make -j 8 BOARD=$BOARD FROZEN_MPY_DIR=$FROZEN_DIR FROZEN_MANIFEST= && pyb_boot $MPDEVICE
    then
        sleep 1
        make PYTHON=python3 BOARD=$BOARD deploy
    else
        echo Build failure
    fi
    cd -
else
    echo Incorrect board type
fi

Full listing:

Building for PYBV10
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
mkdir -p build-PYBV10/genhdr
make: Warning: File 'build-PYBV10/' has modification time 13 s in the future
mkdir -p build-PYBV10/build-PYBV10/
mkdir -p build-PYBV10/drivers/bus/
mkdir -p build-PYBV10/drivers/dht/
mkdir -p build-PYBV10/drivers/memory/
mkdir -p build-PYBV10/extmod/
mkdir -p build-PYBV10/lib/embed/
mkdir -p build-PYBV10/lib/libc/
mkdir -p build-PYBV10/lib/libm/
mkdir -p build-PYBV10/lib/mp-readline/
mkdir -p build-PYBV10/lib/netutils/
mkdir -p build-PYBV10/lib/oofatfs/
mkdir -p build-PYBV10/lib/stm32lib/CMSIS/STM32F4xx/Source/Templates/
mkdir -p build-PYBV10/lib/stm32lib/CMSIS/STM32F4xx/Source/Templates/gcc/
mkdir -p build-PYBV10/lib/stm32lib/STM32F4xx_HAL_Driver/Src/
mkdir -p build-PYBV10/lib/timeutils/
mkdir -p build-PYBV10/lib/utils/
mkdir -p build-PYBV10/py/
mkdir -p build-PYBV10/usbdev/class/src/
mkdir -p build-PYBV10/usbdev/core/src/
MPY modules/font10.py
MPY modules/micropower.py
MPY modules/ssd1306.py
MPY modules/freesans20.py
MPY modules/upysh.py
MPY modules/upower.py
MPY modules/courier20.py
MPY modules/freeserif.py
MPY modules/ugui.py
MPY modules/uasyncio/synchro.py
MPY modules/uasyncio/core.py
MPY modules/uasyncio/__init__.py
MPY modules/uasyncio/queues.py
MPY modules/collections/__init__.py
MPY modules/collections/deque.py
MPY modules/native_misc.py
MPY modules/errno.py
MPY modules/font14.py
MPY modules/logging.py
GEN stmconst build-PYBV10/genhdr/modstm_const.h
GEN build-PYBV10/pins_PYBV10.c
GEN build-PYBV10/genhdr/pybcdc.inf
GEN build-PYBV10/genhdr/pllfreqtable.h
GEN build-PYBV10/genhdr/pybcdc_inf.h
GEN build-PYBV10/genhdr/mpversion.h
GEN build-PYBV10/genhdr/moduledefs.h
GEN build-PYBV10/genhdr/qstr.i.last
GEN build-PYBV10/genhdr/qstr.split
GEN build-PYBV10/genhdr/qstrdefs.collected.h
QSTR updated
GEN build-PYBV10/genhdr/qstrdefs.generated.h
CC ../../py/mpstate.c
CC ../../py/nlr.c
CC ../../py/nlrx86.c
CC ../../py/nlrx64.c
CC ../../py/nlrthumb.c
CC ../../py/nlrxtensa.c
CC ../../py/nlrsetjmp.c
CC ../../py/malloc.c
CC ../../py/gc.c
CC ../../py/pystack.c
CC ../../py/qstr.c
CC ../../py/vstr.c
CC ../../py/mpprint.c
CC ../../py/unicode.c
CC ../../py/mpz.c
CC ../../py/reader.c
CC ../../py/lexer.c
CC ../../py/parse.c
CC ../../py/scope.c
CC ../../py/compile.c
CC ../../py/emitcommon.c
CC ../../py/emitbc.c
CC ../../py/asmbase.c
CC ../../py/asmx64.c
CC ../../py/emitnx64.c
CC ../../py/asmx86.c
CC ../../py/emitnx86.c
CC ../../py/asmthumb.c
CC ../../py/emitnthumb.c
CC ../../py/emitinlinethumb.c
CC ../../py/asmarm.c
CC ../../py/emitnarm.c
CC ../../py/asmxtensa.c
CC ../../py/emitnxtensa.c
CC ../../py/emitinlinextensa.c
CC ../../py/emitnxtensawin.c
CC ../../py/formatfloat.c
CC ../../py/parsenumbase.c
CC ../../py/parsenum.c
CC ../../py/emitglue.c
CC ../../py/persistentcode.c
CC ../../py/runtime.c
CC ../../py/runtime_utils.c
CC ../../py/scheduler.c
CC ../../py/nativeglue.c
CC ../../py/ringbuf.c
CC ../../py/stackctrl.c
CC ../../py/argcheck.c
CC ../../py/warning.c
CC ../../py/profile.c
CC ../../py/map.c
CC ../../py/obj.c
CC ../../py/objarray.c
CC ../../py/objattrtuple.c
CC ../../py/objbool.c
CC ../../py/objboundmeth.c
CC ../../py/objcell.c
CC ../../py/objclosure.c
CC ../../py/objcomplex.c
CC ../../py/objdeque.c
CC ../../py/objdict.c
CC ../../py/objenumerate.c
CC ../../py/objexcept.c
CC ../../py/objfilter.c
CC ../../py/objfloat.c
CC ../../py/objfun.c
CC ../../py/objgenerator.c
CC ../../py/objgetitemiter.c
CC ../../py/objint.c
CC ../../py/objint_longlong.c
CC ../../py/objint_mpz.c
CC ../../py/objlist.c
CC ../../py/objmap.c
CC ../../py/objmodule.c
CC ../../py/objobject.c
CC ../../py/objpolyiter.c
CC ../../py/objproperty.c
CC ../../py/objnone.c
CC ../../py/objnamedtuple.c
CC ../../py/objrange.c
CC ../../py/objreversed.c
CC ../../py/objset.c
CC ../../py/objsingleton.c
CC ../../py/objslice.c
CC ../../py/objstr.c
CC ../../py/objstrunicode.c
CC ../../py/objstringio.c
CC ../../py/objtuple.c
CC ../../py/objtype.c
CC ../../py/objzip.c
CC ../../py/opmethods.c
CC ../../py/sequence.c
CC ../../py/stream.c
CC ../../py/binary.c
CC ../../py/builtinimport.c
CC ../../py/builtinevex.c
CC ../../py/builtinhelp.c
CC ../../py/modarray.c
CC ../../py/modbuiltins.c
CC ../../py/modcollections.c
CC ../../py/modgc.c
CC ../../py/modio.c
CC ../../py/modmath.c
CC ../../py/modcmath.c
CC ../../py/modmicropython.c
CC ../../py/modstruct.c
CC ../../py/modsys.c
CC ../../py/moduerrno.c
CC ../../py/modthread.c
CC ../../py/vm.c
CC ../../py/bc.c
CC ../../py/showbc.c
CC ../../py/repl.c
CC ../../py/smallint.c
CC ../../py/frozenmod.c
CC ../../extmod/moductypes.c
CC ../../extmod/modujson.c
CC ../../extmod/modure.c
CC ../../extmod/moduzlib.c
CC ../../extmod/moduheapq.c
CC ../../extmod/modutimeq.c
CC ../../extmod/moduhashlib.c
CC ../../extmod/moducryptolib.c
CC ../../extmod/modubinascii.c
CC ../../extmod/virtpin.c
CC ../../extmod/machine_mem.c
CC ../../extmod/machine_pinbase.c
CC ../../extmod/machine_signal.c
CC ../../extmod/machine_pulse.c
CC ../../extmod/machine_i2c.c
CC ../../extmod/machine_spi.c
CC ../../extmod/modbluetooth.c
CC ../../extmod/modussl_axtls.c
CC ../../extmod/modussl_mbedtls.c
CC ../../extmod/modurandom.c
CC ../../extmod/moduselect.c
CC ../../extmod/moduwebsocket.c
CC ../../extmod/modwebrepl.c
CC ../../extmod/modframebuf.c
CC ../../extmod/vfs.c
CC ../../extmod/vfs_reader.c
CC ../../extmod/vfs_posix.c
CC ../../extmod/vfs_posix_file.c
CC ../../extmod/vfs_fat.c
CC ../../extmod/vfs_fat_diskio.c
CC ../../extmod/vfs_fat_file.c
CC ../../extmod/utime_mphal.c
CC ../../extmod/uos_dupterm.c
CC ../../lib/embed/abort_.c
CC ../../lib/utils/printf.c
GEN build-PYBV10/frozen_mpy.c
CC ../../lib/libc/string0.c
CC ../../lib/oofatfs/ff.c
CC ../../lib/oofatfs/ffunicode.c
CC ../../lib/mp-readline/readline.c
CC ../../lib/netutils/netutils.c
CC ../../lib/netutils/trace.c
CC ../../lib/netutils/dhcpserver.c
CC ../../lib/timeutils/timeutils.c
CC ../../lib/utils/pyexec.c
CC ../../lib/utils/interrupt_char.c
CC ../../lib/utils/sys_stdio_mphal.c
CC ../../lib/utils/mpirq.c
CC ../../lib/libm/math.c
CC ../../lib/libm/acoshf.c
CC ../../lib/libm/asinfacosf.c
CC ../../lib/libm/asinhf.c
CC ../../lib/libm/atan2f.c
CC ../../lib/libm/atanf.c
CC ../../lib/libm/atanhf.c
CC ../../lib/libm/ef_rem_pio2.c
CC ../../lib/libm/erf_lgamma.c
CC ../../lib/libm/fmodf.c
CC ../../lib/libm/kf_cos.c
CC ../../lib/libm/kf_rem_pio2.c
CC ../../lib/libm/kf_sin.c
CC ../../lib/libm/kf_tan.c
CC ../../lib/libm/log1pf.c
CC ../../lib/libm/nearbyintf.c
CC ../../lib/libm/sf_cos.c
CC ../../lib/libm/sf_erf.c
CC ../../lib/libm/sf_frexp.c
CC ../../lib/libm/sf_ldexp.c
CC ../../lib/libm/sf_modf.c
CC ../../lib/libm/sf_sin.c
CC ../../lib/libm/sf_tan.c
CC ../../lib/libm/wf_lgamma.c
CC ../../lib/libm/wf_tgamma.c
CC ../../lib/libm/thumb_vfp_sqrtf.c
CC ../../extmod/modonewire.c
CC ../../drivers/bus/softspi.c
CC ../../drivers/bus/softqspi.c
CC ../../drivers/memory/spiflash.c
CC ../../drivers/dht/dht.c
CC main.c
CC stm32_it.c
CC usbd_conf.c
CC usbd_desc.c
CC usbd_cdc_interface.c
CC usbd_hid_interface.c
CC usbd_msc_interface.c
CC mphalport.c
CC mpthreadport.c
CC irq.c
CC pendsv.c
CC systick.c
CC powerctrl.c
CC powerctrlboot.c
CC pybthread.c
CC factoryreset.c
CC timer.c
CC led.c
CC pin.c
CC pin_defs_stm32.c
CC pin_named_pins.c
CC bufhelper.c
CC dma.c
CC i2c.c
CC pyb_i2c.c
CC spi.c
CC pyb_spi.c
CC qspi.c
CC uart.c
CC can.c
CC fdcan.c
CC pyb_can.c
CC usb.c
CC wdt.c
CC eth.c
CC gccollect.c
CC help.c
CC machine_adc.c
CC machine_i2c.c
CC machine_spi.c
CC machine_uart.c
CC modmachine.c
CC modpyb.c
CC modstm.c
CC moduos.c
CC modutime.c
CC modusocket.c
CC network_lan.c
CC modnetwork.c
CC extint.c
CC usrsw.c
CC rng.c
CC rtc.c
CC flash.c
CC flashbdev.c
CC spibdev.c
CC storage.c
CC sdcard.c
CC sdram.c
CC fatfs_port.c
CC lcd.c
CC accel.c
CC servo.c
CC dac.c
CC adc.c
AS ../../lib/stm32lib/CMSIS/STM32F4xx/Source/Templates/gcc/startup_stm32f405xx.s
CC ../../lib/stm32lib/CMSIS/STM32F4xx/Source/Templates/system_stm32f4xx.c
CC system_stm32.c
AS resethandler.s
AS ../../lib/utils/gchelper_m3.s
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rtc_ex.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_mmc.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sdram.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dcmi.c
CC ../../lib/stm32lib/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c
CC usbdev/core/src/usbd_core.c
CC usbdev/core/src/usbd_ctlreq.c
CC usbdev/core/src/usbd_ioreq.c
CC usbdev/class/src/usbd_cdc_msc_hid.c
CC usbdev/class/src/usbd_msc_bot.c
CC usbdev/class/src/usbd_msc_scsi.c
CC build-PYBV10/pins_PYBV10.c
CC build-PYBV10/frozen_mpy.c
LINK build-PYBV10/firmware.elf
   text	   data	    bss	    dec	    hex	filename
 404004	     32	  27844	 431880	  69708	build-PYBV10/firmware.elf
GEN build-PYBV10/firmware.dfu
GEN build-PYBV10/firmware.hex
make: warning: Clock skew detected. Your build may be incomplete.
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
make: Warning: File 'build-PYBV10/pins_PYBV10.P' has modification time 6.2 s in the future
MPY dht.py
MPY lcd160cr.py
MPY lcd160cr_test.py
MPY onewire.py
GEN build-PYBV10/frozen_content.c
CC build-PYBV10/frozen_content.c
LINK build-PYBV10/firmware.elf
   text	   data	    bss	    dec	    hex	filename
 335188	     32	  27844	 363064	  58a38	build-PYBV10/firmware.elf
GEN build-PYBV10/firmware.dfu
Writing build-PYBV10/firmware.dfu to the board
File: build-PYBV10/firmware.dfu
    b'DfuSe' v1, image size: 335525, targets: 1
    b'Target' 0, alt setting: 0, name: "ST...", size: 335240, elements: 2
      0, address: 0x08000000, size: 14872
      1, address: 0x08020000, size: 320352
    usb: 0483:df11, device: 0x0000, dfu: 0x011a, b'UFD', 16, 0x9377312e
Writing memory...
0x08000000   14872 [=========================] 100% 
0x08020000  320352 [=========================] 100% 
Exiting DFU...
make: warning: Clock skew detected. Your build may be incomplete.
/mnt/qnap2/data/Projects/MicroPython/micropython_ra8875
[adminpete@capybara]: /mnt/qnap2/data/Projects/MicroPython/micropython_ra8875

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied