otree入门常见问题
学弟/学妹,别慌!刚接触oTree的时候,大家问的问题都差不多。我把你这些问题,用咱们学生之间聊天的方式,整理了一下。这感觉就像你在宿舍楼下,碰到了一个刚做完实验的学长,他告诉你的一些“血泪经验”。
1. 救命!oTree这玩意儿到底怎么装?官方文档第一步就劝退了…
这绝对是第一道坎,90%的人都在这卡过。官方文档是给有经验的程序员看的。
我的建议:
- 
第一步: 别管官方文档,直接跟着我的教程来安装 https://otree.xindamate.xyz/?p=99
 - 
常见巨坑: 如果报错
otree_startup_failed。99%的可能是Python环境问题。记住一条咒语:“为oTree创建一个独立的虚拟环境 (virtual environment)”。把oTree相关的包都装在这个“隔离区”里,就不会和你电脑上其他Python项目打架了。 - 
Python水平? 你会
if/else就够了。oTree编程更像是“填空题”,而不是“写作文”。大部分时候,你都是在改官方给的模板。 
2. 老师让我做个“最后通牒博弈”,我一个字都写不出来… 有没有模板给我抄…啊不,参考一下?
哈哈哈,我懂!没人一上来就会自己写。你的“宝藏库”有两个:
- 
oTree官方的
Public Projects: https://www.otreehub.com/projects/ 里面有现成的囚徒困境、公共品博弈等。 - 
GitHub: 去GitHub搜
oTree ultimatum gamehttps://github.com/search?q=oTree%20ultimatum%20game&type=repositories,你能找到全世界各路大神写的版本。 
高效“参考”方法:
- 
把你看中的项目代码下载下来。
 - 
用
otree zipserver [你下载的压缩包文件名.zip]这个命令,把它在你电脑上跑起来。 - 
关键一步: 把你的项目窗口和范例项目的窗口并排放在屏幕上,对着看!看它的
models.py是怎么定义变量的,pages.py是怎么写页面逻辑的。先模仿,再理解,最后才是创新。 
3. 我怎么知道代码有没有bug?总不能直接找同学来测,万一崩了多尴尬…
信我,直接找真人测,一定会崩,特别尴尬(别问我怎么知道的)。
你必须用oTree的 Bots (机器人) 功能。它不是简单帮你点“下一页”,而是你代码的“压力测试员”。
- 
具体场景: 比如你做公共品博弈,要求玩家投入0-10个币。你可以在机器人的脚本里故意让它提交一个
-5或者100。如果你的代码没做限制,机器人就会在这里报错。这时候你就知道,得在Player的contribution字段里加上min=0, max=10这个参数了。 - 
Pro Tip: 在测试阶段,把
SESSION_CONFIGS里的num_demo_participants改成你实验的人数,比如20人。然后点一下Start bots,它就能瞬间模拟20个人跑完你的实验,什么奇奇怪怪的bug都能帮你炸出来。 
4. session, app, page, round 这些词到底啥意思啊?我被绕晕了。
忘掉官方定义,把它想象成一个闯关游戏:
- 
Session(一场实验): 你和你的小伙伴们 “开始玩这整个游戏”。比如“周三下午三点场”。 - 
App(一个大关卡): 游戏里有好几个大关卡。比如第一关是“新手教程”(填个人信息),第二关是“Boss战”(主实验博弈),第三关是“领取奖励”(问卷调查)。 - 
Round(关卡里的重复挑战): 你的“Boss战”可能要打好几轮。每一轮都是一个Round。 - 
Page(关卡里的每个房间): 每一关里,你都要经过好几个房间。比如“游戏说明”房间、“做出选择”房间、“看结果”房间。每个房间就是一张Page。 
记住这个顺序:Session > App > Round > Page。这么一想,结构就清晰了。
5. 我改了代码,刷新页面怎么没反应?
这是个超级常见,但文档里几乎不提的坑!
oTree为了性能,会缓存很多东西。你改了Python代码(比如 models.py 或 pages.py),简单地刷新网页是没用的!
正确做法: 回到你的命令行/终端,按 Ctrl+C 停止oTree服务器,然后按“向上”方向键,找到你上次输入的 otree devserver 命令,回车,重启服务器。每次修改 .py 文件后,都要这么做。修改HTML模板文件通常不需要重启。
6. 我做好了想发给别人填,怎么放到网上?是不是得租服务器,很贵吧?
对于学生的小规模实验,用 Heroku 是标准答案。
- 
价格: 别被“服务器”吓到。Heroku的基础方案一个月7-10美元,大概就是两杯奶茶钱,就能撑起你几十上百人的小实验了。
 - 
关键文件: 第一次部署到Heroku,大概率会失败。失败原因通常是少了几个关键的配置文件。检查你的项目根目录里有没有这三个文件:
Procfile,requirements_base.txt,runtime.txt。oTree官方文档有教你怎么生成它们,照着做就行。 - 
HTTPS/数据库: Heroku默认就给你搞定了HTTPS安全链接,添加数据库也是点几下鼠标,非常方便。
 
7. 实验做完了,怎么把数据导出来啊?
这个问题的频率绝对是Top 3!
实验顺利跑完,恭喜!现在是收获的时候了:
- 
用管理员身份登录你的oTree实验后台。
 - 
顶部导航栏有一个“Data”选项卡。
 - 
点进去,你会看到所有Session的数据。你可以选择导出“all_apps_wide”这个CSV文件,它会把一个被试所有的数据都放在同一行里,这是最常用的格式,方便用Stata或Excel分析。
 - 
旁边还有一个“Page times”的CSV,可以导出每个被试在每个页面停留了多久,有时候可以用来判断他是不是在划水。
 
8. 在主实验前面加一个同意书,最后加一个问卷,怎么实现?
这个思路非常对,就是把它们做成独立的app。
- 
在你的项目里,创建三个app,比如
app1_consent(同意书),app2_main_game(主实验),app3_survey(问卷)。 - 
打开项目根目录的
settings.py文件。 - 
找到
SESSION_CONFIGS这个设置。在你的实验配置里,有一个叫app_sequence的列表。 - 
把它的顺序改成
['app1_consent', 'app2_main_game', 'app3_survey']。 - 
重启服务器,搞定!oTree就会像播放列表一样,按顺序执行这几个app。
 
9. 实验里的“ECU”、“虚拟币”最后怎么算成真钱?
这是oTree的核心功能,比你想象的简单。
- 
在
settings.py里,定义好你的REAL_WORLD_CURRENCY_PER_POINT,比如0.5,代表1个虚拟币 = 0.5元。 - 
在实验的每一轮,你把玩家挣的虚拟币存到一个叫
player.payoff的特殊变量里。oTree会自动帮你累加每一轮的payoff。 - 
实验结束后,oTree会自动计算出
总虚拟币 * 兑换率的金额。 - 
关键: 别忘了实验还有 参与费 (participation fee)。你可以在
SESSION_CONFIGS里设置它。最终被试看到的钱,是player.payoff换算后的钱 + 参与费。oTree后台的支付页面会帮你把这两项加好,清清楚楚。 
最后,给你的几句心里话:
- 
学会看报错: 满屏红字很吓人,但永远只看最后一行。它会告诉你哪个文件的哪一行出错了。
 - 
多用
print(): 不确定一个变量的值是什么?就在代码里print(self.player.my_variable),答案会直接显示在你的命令行窗口里。这是最简单粗暴但极其有效的调试方法。 - 
耐心和Google是你的超能力: 你遇到的99%的问题,Google上都有人问过。把报错信息复制粘贴到Google,通常第一个结果就是oTree官方论坛或StackOverflow的答案。
 
加油!搞定oTree,不仅能让你的实验顺利完成,这个解决问题的过程本身,也会让你收获巨大。祝实验顺利,数据给力,早日发paper!