如何在PyScript中导入自定义Python包/模块?
解决PyScript导入自定义包的ModuleNotFoundError问题
1. 先确认包结构合规性
自定义包必须包含__init__.py文件(空文件也可以),PyScript依赖这个文件识别目录为合法Python包。你的文件夹结构应该是这样:
docs/ ├── package/ │ ├── __init__.py │ └── example.py └── index.md # 你的文档页面
如果package目录里没有__init__.py,直接创建一个空文件即可。
2. 手动配置PyScript的模块路径
浏览器环境不会自动识别本地包路径,需要手动指定,两种方式任选其一:
方式一:通过<py-config>配置
在页面的PyScript配置块中,添加paths指向包所在目录:
<py-config> packages = ["numpy", "matplotlib"] paths = ["./package"] </py-config>
注意路径是相对当前HTML页面的位置,要和mkdocs构建后的文件结构对应上。
方式二:在代码中动态添加路径
在PyScript代码开头,把包目录加入Python路径:
import sys sys.path.append('./package') from package.example import myplot
同样要保证相对路径的正确性,确保浏览器能访问到package下的文件。
3. 检查mkdocs的部署配置
确认mkdocs.yml里没有排除package目录的规则,比如:
# mkdocs.yml示例,确保exclude不包含package exclude: - venv/ - .git/
mkdocs默认会把docs下的所有文件复制到构建站点,只要没被排除就会正常部署。
4. 强制清除浏览器缓存
浏览器可能缓存了旧的文件结构,按Ctrl+Shift+R(Chrome)或Cmd+Shift+R(Safari/Firefox)强制刷新页面,再测试导入效果。
验证用示例代码
假设package/example.py内容如下:
import numpy as np import matplotlib.pyplot as plt def myplot(): x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) plt.plot(x, y) plt.show()
mkdocs页面中的PyScript代码块:
<py-config> packages = ["numpy", "matplotlib"] paths = ["./package"] </py-config> <py-script> from package.example import myplot myplot() </py-script>
内容的提问来源于stack exchange,提问作者maro12
相关产品推荐
相关产品推荐

