Skip to content

GoodenoughPhysicsLab/physicsLab

Repository files navigation

physicsLab

输入图片说明

License build support-version

介绍

当我们在物理实验室AR纯手动做实验的时候, 往往会遇到一些琐碎、麻烦但又不得不做的事情, 比如:重复的搭建某些电路, 调整元件的位置, 电路内部结构的重复。这些问题都可以通过使用physicsLab生成这些电路结构来轻易解决!于是我写了physicsLab, 让你能用Python在物实做实验。

而在参与物实社区的时候, 有时候又会遇到一些手动很麻烦的情况, 我们就可以使用physicsLab.web来通过网络api操作物实社区。

部分方便且惊艳的功能展示

  • 同时支持通过存档的文件名与存档名访问存档
  • 不受实验室大小地随意摆放元件 (比如在实验室外悬空的元件)
  • 将midi转换为物实对应的电路
  • 修改物实的实验封面
  • 获取用户的所有头像或实验用过的所有封面

更多好用的功能等你来发现

功能支持

  • 跨平台支持, 只要Python3.8+能在该平台上运行并且能够读写文件, 比如Windows7+, Linux, MacOS, Android
  • 支持物实所有实验类型:电学, 天体物理, 电与磁
  • 支持物实全部元件
  • 大多数物实网络api封装的支持 (直接与物实服务器进行交互)

稳定&兼容

自版本2.0.0及之后, physicsLab会逐步增加兼容的考虑与支持。承诺stable的api将永远不会移除, 行为几乎不会改变, 除非物实更改了一些api的行为导致physicsLab的底层api的行为被迫发生改变或者更改几乎没有任何影响。

  • v2.0.0: 承诺ExperimentOpenedError, ExperimentClosedError, ExperimentExistError, ExperimentNotExistErrorstable
  • v2.0.1: 承诺三大实验所有元件的类名会stable
  • v2.0.3: 承诺class Experimentstable
  • v2.0.4: 承诺class User, anonymous_login, email_login, token_loginstable
  • Note: v2.0.4 将部分函数抛出TypeError的行为替换为了abort(), 因为我认为这个异常永远不应该被捕获。这是一个极小的breaking change但我认为有利于让physicsLab变得更好, 并且对使用者的影响微乎其微。
  • v2.0.5: 承诺__version__stable

版本发布

physicsLab的版本发布采取快照的方式, physicsLab仅会维护trunk

安装教程

  1. 请确保你的电脑有Python(>=3.8)与物理实验室AR(简称物实)(也可以联系物理实验室的开发者John-Chen

  2. 在cmd或shell输入以下载physicsLab:

pip install physicsLab

在某些非正常情况, 你可能无法顺利使用pip, 此时你可以换为该命令来解决该问题:

python -m pip install physicsLab

Note: 在Windows下你可以输入py来使用Python, Linux, MacOS下可能需要输入python3或者python3.xpython加上你的Python版本)来使用python

  1. 有一个并非必需的功能:播放midi(仅在Windows下可用)。你可以输入下面命令的任意一条:
pip install plmidi
pip install pygame

点击跳转至plmidi

  1. 物实存档使用了中文字符, 默认编码为utf-8。但在一些非正常情况, 存档的编码可能被改变。虽然physicsLab有一定的处理存档编码问题的能力, 但如果还是出现了问题, 请输入该命令:
pip install chardet

此时physicsLab会自动调用chardet来处理更加棘手的文件编码问题。

  1. 如果下载成功, 就可以查看快速开始, 开始你的使用了

Note: 每次通过physicsLab生成了一个新的存档之后, 都需要重新加载物实的本地存档, 即点击从本地读取, 再次点击进入对应存档

新手解惑: 为什么我明明安装了physicsLab, python却告诉我无法找到?

pip安装的包会被放在site-packages文件夹下
这大概率是因为pip安装的包所对应的site-packages与你使用的Python对应的site-packages不一样导致的
解决方案:找到ide调用的python对应的site-packages, 然后把physicsLabphysicsLab.egg-info复制过去
同时我推荐去学一下Python的虚拟环境venv, 有效解决此问题

如果此方法失效了, 虽然这一定不是这个方法的问题, 但你还可以在python的开头写上这两行代码来解决这个问题:

import sys
sys.path.append("/your/path/of/physicsLab") # 将字符串替换为你想添加的路径

这个方法很丑陋但很简单好用, 可以帮你快速解决问题, 毕竟能跑起来就很不错了
其原理是Python会在sys.path这个列表里面的路径去寻找Python Package, 若未找到则会报错。因此该方法的原理就是把Python找不到的路径加进去, Python就找到了
注:每次运行的时候的sys.path都是临时的, 因此该方法必须让Python在每次运行的时候都执行一遍

特殊说明事项

  • 如果physicsLab抛出AssertionError, 请报告 bug (请在issue中附上最小复现)

  • 目前physicsLabwindows上的支持最好, 在其他操作系统上仅支持手动导入/导出存档(默认在physicsLabSav文件夹中)。

  • 在安卓上要使用physicsLab的话, 可以通过qpython或者Termux(推荐) 进行使用

    • qpython v3.2.5中大大削减了python在文件路径操作方面的权限, 这意味着在qpython上使用physicsLab生成的存档将很难被物实导入, 因为物实没权限访问不了, 但此问题在qpython v3.2.3中不存在, 推荐下载该版本。
    • Termux的话, 需要设置输出存档的路径到/storage/emulated/0/ (不同安卓设备路径可能不同), 或者手动mv一下生成的存档, 这样才能让物实访问对应的存档。
    • 不过由于安卓权限的问题, 用起来肯定没有电脑上方便。
  • 由于physicsLab使用中文注释而且物实的存档也使用了中文, 因此我建议你手动在Python代码的第一行添加如下注释:

# -*- coding: utf-8 -*-

不过由于编码导致问题的情况似乎很少

优点

  • physicsLab拥有优秀的与物实存档交互的能力, 你甚至可以使用程序完成部分工作之后你再继续完成或者让程序在你已完成的实验的基础上继续完成。 如此灵活的功能使得physicsLab即使是在Pythonshell上也能出色的完成工作!
  • physicsLab为纯Python库, 其c拓展部分(播放midi的部分)被放到了plmidi中, 但plmidi不是必须需要的。纯Python库通常意味着更容易使用, 更少的问题。
  • 封装了物实里的大量元件, 即使是未解锁的元件也可以轻易用脚本生成, 甚至一些常用的电路也被封装好了!
  • 物理实验室存档的位置有点隐蔽, 但用该脚本生成实验时, 你无须亲自寻找这个文件在哪里。
  • 外部依赖少
  • 相比于手动做实验, 代码复用率更高, 许多逻辑电路已经被封装, 只需简单的一行调用即可生成。
  • 程序有利于大型实验的创作
  • 改存档做出来的实验往往有十分惊艳的效果!

其他

contribute

physicsLab没有强行要求代码风格, 但需要注意与上下文保持一致

你可以从更新文档、bugfix、写测试代码开始入手

About

Python API for Quantum-Physics App

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 6

Languages