当前位置:   article > 正文

AI4Green开源ELN(电子实验记录本)_cannot import name _request_ctx_stack

cannot import name _request_ctx_stack

AI4Green是一个开源的电子实验记录本,官网:https://github.com/AI4Green/ai4green

国内镜像

skywalk163/AI4Green - AI4Green - OpenI - 启智AI开源社区提供普惠算力!

论文地址:https://pubs.acs.org/doi/10.1021/acs.jcim.3c00306#

另一个开源的:https://github.com/epam/Indigo-ELN-v.-2.0 

https://gitee.com/mirrors_epam/Indigo-ELN-v.-2.0

AI4Green介绍

AI4Green 是一个基于 Web 的应用程序,可作为开源代码免费使用。它提供了ELN的核心功能,即能够安全地存储反应并在研究团队的不同成员之间共享它们。当用户计划他们的反应并将其记录在ELN中时,通过自动计算绿色指标和颜色编码危害、溶剂和反应条件来鼓励绿色和可持续的化学。该接口链接了一个由从 PubChem 中提取的数据构建的数据库,从而能够自动整理反应信息。该应用的设计有助于开发辅助可持续性应用,例如我们的溶剂指南。随着捕获更多的反应数据,后续工作将包括向用户提供“智能”可持续性建议。

特色功能:

完成反应表后,用户将被定向到汇总表(上图)。信息会自动从反应表传递到汇总表。向用户显示反应的绿色性和可持续性的视觉评估。这些要么被标记为不可持续(红色),要么被赋予红绿灯系统(红色 = 不推荐/危险,黄色 = 有问题,绿色 = 推荐)。可以在辅助功能页面上更改这些评级的特定颜色和阴影。根据危险代码生成总体危险等级,表示为低 (L)、中 (M)、危险 (H) 或非常危险 (VH)。以下指标的可持续性水平阈值符合 CHEM21 项目。(27)其中一些指标是自动计算的,例如反应中使用的化学元素的可持续性和原子效率。其他指标必须由用户输入,例如反应温度、间歇或流动反应条件、分离方法、催化剂的使用以及该催化剂是否被回收。接下来是风险评估部分,允许用户识别标准协议、废物处理、溢出程序以及与反应相关的任何其他风险。然后,可以通过对反应的危害、风险和后果进行自我评估来计算总体风险评分。通常,此时将进行反应。反应运行后,用户可以返回汇总表并输入未反应和实际产品质量。使用这些输入,可以计算出另外四个指标:质量效率、产量、转化率和选择性。在此阶段,可以将反应标记为完成并锁定以进行进一步编辑。 为了提高数据完整性,反应修改在数据库中带有时间戳。反应当前可以按字母顺序或最近创建的内容进行搜索。

开始安装

AI4Green有两种安装方法,一种是docker,一种是普通的配置python环境安装。

docker安装适合快速展示其功能。

下面介绍python安装

先安装python

  1. wget https://mirrors4.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py38_4.9.2-Linux-x86_64.sh
  2. sh Miniconda3-py38_4.9.2-Linux-x86_64.sh

再安装需要的python库:

发现它没有requirements.txt文件,补上一个:

  1. python-dotenv
  2. flask_login
  3. flask_marshmallow
  4. flask_migrate
  5. flask_mail
  6. flask_wtf
  7. flask_db
  8. pytz
  9. psycopg2-binary
  10. chemspipy
  11. bs4
  12. lxml
  13. pyyaml
  14. werkzeug
  15. marshmallow_sqlalchemy
  16. python-magic
  17. azure-core
  18. azure-storage-blob
  19. plotly
  20. toml

在docker里面找到了它的requirements.txt文件

  1. beautifulsoup4==4.9.3
  2. certifi==2021.10.8
  3. ChemSpiPy==2.0.0
  4. click==8.0.3
  5. email-validator==1.1.3
  6. Flask==2.0.1
  7. Flask-Login==0.5.0
  8. Flask-Mail==0.9.1
  9. Flask-Testing==0.8.1
  10. Flask-WTF==0.14.3
  11. itsdangerous==2.0.1
  12. Jinja2==3.0.2
  13. lxml==4.6.3
  14. pandas==1.4.1
  15. pip==21.2.4
  16. pony==0.7.14
  17. psycopg2-binary==2.9.3
  18. PyJWT==2.1.0
  19. python-dateutil==2.8.2
  20. python-decouple==3.5
  21. pytz==2021.3
  22. pyyaml==6.0
  23. requests==2.26.0
  24. selenium==3.141.0
  25. setuptools==58.0.4
  26. soupsieve==2.3.1
  27. urllib3==1.26.7
  28. Werkzeug==2.0.3
  29. wheel==0.37.1
  30. WTForms==2.3.3
  31. plotly==5.9.0

另外它还需要安装rdkit这个库!
 

在配置python环境时,发现它是使用conda的,众所周知,conda有时候会比较慢,所以换用了pip安装,但是整个项目都没有找到requirements.txt文件,于是只好手工试出来这些库。当然最终是从项目里面找到了官方的文件,发现很多库版本都是写死的,这也是为什么刚开始手工试出来这些库还是无法成功运行的原因。

数据库

数据库那边,看得不是很明白,是不是需要先安装一个postgre库呢? 还是直接使用sqlalchery就可以了呢?

先回答这个问题:

直接启动,它会提示:`Starting app in test/development mode with sqlite database`也就是使用了测试开发模式,使用了sqlite数据库。

安装过程中碰到的问题:

按照手册单步执行,数据集flask db upgrade这句没法执行,报错`Error: No such command 'db'.`

后面执行下载数据集`flask download-pubchem`,也是卡住

  1. for prop in model.__mapper__.attrs:
  2. Downloading PubChem database file: http://ftp.ncbi.nlm.nih.gov/pubchem/Compound/Extras/CID-LCSS.xml.gz and saving as Pubchem-Database

关于flask数据库的操作,可以参考这个文档:在 Flask应用中使用Flask-SQLAlchemy管理数据库 - 知乎

查看docker里面,发现其执行命令为:

  1. # init a base image
  2. FROM continuumio/miniconda3
  3. # Create the environment:
  4. COPY environment.yaml .
  5. RUN conda env create -f environment.yaml
  6. # Make RUN commands use the new environment:
  7. SHELL ["conda", "run", "-n", "ai4green", "/bin/bash", "-c"]
  8. # install RDKit
  9. RUN conda install -c conda-forge rdkit
  10. # run pip to install the dependencies of the flask app
  11. COPY requirements.txt requirements.txt
  12. RUN pip install -r requirements.txt
  13. # The code to run when container is started:
  14. COPY . .
  15. EXPOSE 80
  16. ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "ai4green", "python", "Webapp/app.py"]

而且github中的,和docker里面的,文件都不一样。比如github里面没有requirements.txt config.py configs.yaml 等文件。

手工安装的时候,最后会报错:

  1. (ai4green) skywalk@ub:~/work/Webapp$ python app.py
  2. Traceback (most recent call last):
  3. File "app.py", line 4, in <module>
  4. from sources import app
  5. File "/home/skywalk/work/Webapp/sources/__init__.py", line 10, in <module>
  6. from flask_login import LoginManager # imports the login manager from Flask-Login
  7. File "/home/skywalk/py39/envs/ai4green/lib/python3.8/site-packages/flask_login/__init__.py", line 16, in <module>
  8. from .login_manager import LoginManager
  9. File "/home/skywalk/py39/envs/ai4green/lib/python3.8/site-packages/flask_login/login_manager.py", line 12, in <module>
  10. from flask import (_request_ctx_stack, abort, current_app, flash, redirect,
  11. ImportError: cannot import name '_request_ctx_stack' from 'flask' (/home/skywalk/py39/envs/ai4green/lib/python3.8/site-packages/flask/__init__.py)

 将flask版本降低到2.01,搞定:

Flask==2.0.1

pip install  Flask==2.0.1

后来发现整个flask的库版本都要降低,一个个试最后放弃了。最终是在项目的docker环境里找到了requirements.txt文件,否则真不知道要试到什么时候。

安装总结:

现在采用的安装方式是一种折中的方案,即用python安装,但是使用docker里面的文件(启动docker,从里面拷贝出来),运行采用测试开发模式。

marvin需要注册的问题

注册地址:Chemicalize Professional - Hosted Cheminformatics Solutions

也就是这个系统最终需要联网使用,需要先到pro.chemicalize.com/app注册一个key,画图使用marvin的时候,都要到联网验证这个key。 因此不联网是无法使用的。

jquery加速问题:

配置好后,执行python Webapp/app.py 即可打开web服务。测试时发现网页打开很慢,尤其是jquery的代码读取,卡住好大一会儿!

解决的方法就是将jquery的js代码下到本地,修改成本地static读取

  1. src="https://code.jquery.com/jquery-3.7.0.js"
  2. # 修改为:
  3. src="/static/jquery/jquery-3.7.0.js"
  4. # 同样的jquery-2.2.4.min.js文件也做同样处理

具体参考:前端cdn、ajax、code等加速-CSDN博客

总结:

Linux下docker和python都调通。FreeBSD下python能启动,但是画图之后,提交失败,无法进入反应过程。

AI4Green是一个比较出色的开源电子实验记录本ELN,稍加修改,还是能满足创业医药公司使用的。

其它电子实验记录本还有哪些,欢迎朋友们留言提供信息!

安装过程步骤:

  1. wget https://mirrors4.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py38_4.9.2-Linux-x86_64.sh
  2. sh Miniconda3-py38_4.9.2-Linux-x86_64.sh
  3. # 将python3.8安装到py38目录,激活pythn环境。conda安装时选择激活,则下次登录的时候自动激活。
  4. source py38/bin/activate
  5. # 设置pip全局镜像
  6. pip config --global set global.index-url https://mirror.baidu.com/pypi/simple/
  7. # 若全局报错,则添加用户镜像
  8. pip config --user set global.index-url https://mirror.baidu.com/pypi/simple/
  9. 下载ai4green源代码
  10. mkdir github
  11. cd github
  12. git clone https://openi.pcl.ac.cn/skywalk163/ai4green
  13. 进入ai4green安装库
  14. cd ai4green/Webapp
  15. pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple
  16. # 或
  17. pip install -r req.txt -i https://mirror.baidu.com/pypi/simple

新的requirements.txt文件,暂时还是用repo里的req.txt:

  1. beautifulsoup4==4.9.3
  2. certifi==2021.10.8
  3. ChemSpiPy==2.0.0
  4. click==8.0.3
  5. email-validator==1.1.3
  6. Flask==2.0.1
  7. Flask-Login==0.5.0
  8. Flask-Mail==0.9.1
  9. Flask-Testing==0.8.1
  10. Flask-WTF==0.14.3
  11. itsdangerous==2.0.1
  12. Jinja2==3.0.2
  13. lxml==4.6.3
  14. pandas==1.4.1
  15. pip==21.2.4
  16. # pony==0.7.14
  17. pony
  18. psycopg2-binary==2.9.3
  19. PyJWT==2.1.0
  20. python-dateutil==2.8.2
  21. python-decouple==3.5
  22. pytz==2021.3
  23. pyyaml==6.0
  24. requests==2.26.0
  25. selenium==3.141.0
  26. setuptools==58.0.4
  27. soupsieve==2.3.1
  28. urllib3==1.26.7
  29. Werkzeug==2.0.3
  30. wheel==0.37.1
  31. WTForms==2.3.3
  32. plotly==5.9.0
  33. rdkit

好吧,还是没有弄好,想合并两个依赖库文件,但是发现效果未必好,还是先pip安装第一个,再安装第二个吧!

如果还是反复flask和sqlalchemy报错,则需要到官方的docker里面,拿里面的代码。我发现那里面的代码跟github上的不一样,官方github的代码会一直报错:  cannot import name 'app_ctx' from 'flask.globals'  ,这个地方坑了我两次! 

一次是docker里面能启动,但是pip安装环境不能启动,后来是cp了docker里面的代码才搞定。

第二次是,想尝试在新的机器安装并总结出快速安装的步骤,结果一直报错,无法启动。后来才想起来是代码不一致的问题。

调试:

FreeBSD下安装virtualbox 报错:

freebsd下pkg安装virtual box报错:pkg: cached package lzo2-2.10_1: missing or size mismatch, cannot continue Consider running 'pkg update -f'

解决的方法,是重新设定pkg的源使用latest

FreeBSD: {
  url: "http://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/quarterly",
}

放置在/usr/local/etc/pkg/repos

同样的,/etc/make.conf文件也重新写了一下

报错:

    from werkzeug.urls import url_quote
ImportError: cannot import name 'url_quote' from 'werkzeug.urls' (/home/skywalk/py39/envs/ai4green/lib/python3.8/site-packages/werkzeug/urls.py)

将werkzeug的版本也降下来

报错:

    from flask.globals import app_ctx
ImportError: cannot import name 'app_ctx' from 'flask.globals' (/home/skywalk/py39/envs/ai4green/lib/python3.8/site-packages/flask/globals.py)

究其原因是flask的版本太高了,降低到2.x, flask-sqlalchemy的版本也要降低:

pip install Flask-sqlalchemy==2.0.0

最根本原因是docker里面使用了conda常见flask环境,没有见到这些flask的版本限制。

(若还有问题,升级到2.4版本,如下)

报错:ModuleNotFoundError: No module named 'flask.ext'

    from flask.ext.sqlalchemy._compat import iteritems, itervalues, xrange, \
ModuleNotFoundError: No module named 'flask.ext'

把flask_sqlalchemy版本降低到2.4-2.5 大约问题解决。

报错:

 File "/home/skywalk/py39/envs/ai4green/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 79, in _include_sqlalchemy
    for key in module.__all__:
AttributeError: module 'sqlalchemy' has no attribute '__all__'

解决方法;pip install sqlalchemy==1.4.40

报错:

 self.SQLAlchemySchema.OPTIONS_CLASS.session = db.session
AttributeError: '_SQLAlchemyState' object has no attribute 'session'

先上结论:flask的sqlalchemy也是乱的一塌糊涂啊!

https://wiki.freebsd.org/VirtualBox

多亏后面找到了库依赖文件,不然一个一个试,会让人中途放弃的。

升级:pip install sqlalchemy==2.0.23

FreeBSD下画分子图后无法提交

无法提交,提交报错`Cannot process Reactant 1 structure` ,无法进入下一步反应模式,但是在Linux就正常。

这样就不能用FreeBSD平台了。

flask db upgrade数据库更新命令报错

```

Starting app in test/development mode with sqlite database
PONY_TEST
Usage: flask [OPTIONS] COMMAND [ARGS]...
Try 'flask --help' for help.

Error: No such command 'db'.

```

可能需要前面一步步慢慢来吧,中间过程没法跳过。不够关键这是flask的报错啊,版本应该是对的啊! 不过FreeBSD下因为安装RDKIT,导致只能放在系统目录,不能放在venv虚拟目录,可能这也是导致问题发生的原因。

报错cannot import name 'safe_str_cmp'

    from werkzeug.security import safe_str_cmp
ImportError: cannot import name 'safe_str_cmp' from 'werkzeug.security' (/mnt/data/work/py38/lib/python3.8/site-packages/werkzeug/security.py)

安装2.0版本解决: pip install werkzeug==2.0

报错:ImportError: libXrender.so.1: cannot open shared object file: No such file or directory

解决方法: sudo apt install libxrender1

ubuntu下wifi设置

先查看无线网卡,可以用ifconfig ,若是看不到,用ifconfig -a 

然后搜索wifi网络,用sudo iw dev wlp3s0 scan | more

然后写配置文件

$sudo -i
# wpa_passphrase mywireless secretpassphrase > /etc/wpa_supplicant/wpa_supplicant.conf
特殊说明:
1、mywireless 表示你要登录的 wifi 名字
2、secretpassphrase 表示 wifi 登录的密码 

最后是加载配置文件:wpa_supplicant -i wlp3s0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B

我使用的时候没有加-B选项

 参考这篇文档:Ubuntu使用命令行配置WIFI_ubuntu无线网-CSDN博客

 报错:libXext.so.6

from rdkit.Chem.Draw import rdMolDraw2D
ImportError: libXext.so.6: cannot open shared object file: No such file or directory

解决方法:apt install libxext6 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/185792
推荐阅读
相关标签
  

闽ICP备14008679号