我在使用Brightway2导入Ecoinvent 3.2时遇到了一些问题,我正在关注example notebook:
from brightway2 import *
fp = 'D:\LCAdb\e_3.2_cutoff_lci\datasets'
projects.set_current("myproject")
bw2setup()
ei = SingleOutputEcospold2Importer(fp, "ecoinvent 3.2 cutoff")
我收到一条似乎阻止导入过程的警告消息
C:\用户\ @@@ \ Anaconda3 \ ENVS \ BW3 \ lib中\站点包\ bw2data \ project.py:157: UserWarning: 只读项目
此项目正由另一个进程使用,无法写入 直到: 1.关闭其他程序,或切换到其他项目和 2.您致电
projects.enable_writes
并获取回复True
。If you are **sure** that this warning is incorrect, call `projects.enable_writes(force=True)` to enable writes.
warnings.warn(READ_ONLY_PROJECT)
如果我跑
projects.enable_writes(force=True)
我得到另一个延迟错误
PermissionError Traceback(最近一次调用 最后)in() ----> 1 projects.enable_writes(force = True)
C:\用户\ @@@ \ Anaconda3 \ ENVS \ BW3 \ lib中\站点包\ bw2data \ project.py 在enable_writes中(self,force) 234“”“启用当前项目的写入。”“” 235如果有力: - > 236 os.remove(os.path.join(self.dir,“write-lock”)) 237 self.read_only = not self._lock.acquire(timeout = 0.05) 238如果不是self.read_only:
PermissionError:[WinError 32] El proceso no tiene acceso al archivo porqueestásiendoutilizado por otro proceso: 'C:\用户\ @@@ \应用程序数据\本地\ pylca \ Brightway3 \ myproject.4da39212894ad06eb7c95810f8a2a6b0 \写锁'
翻译的winerror类似于“进程无法访问该文件,因为该文件正被其他进程使用”
我没有同时运行其他Brightway环境,我最近更新了Brightway2,所以我不知道问题出在哪里。有什么想法吗?
谢谢!
UPDATE1:我在另一台计算机上安装了brightway2,但我发现了相同的警告信息。尽管有消息,但导入似乎是正确的。一旦数据库被加载和写入,如果我再次打开项目,数据库仍然存在。
在之前的笔记本电脑中,导入过程对于机器来说似乎太多了(华硕S56CB带有Windows 10和6 GB RAM)。在等待结果40分钟后,我通常绝望并杀死它。我将尝试重新安装python ...
答案 0 :(得分:1)
请参阅how do I resolve errors about read-only projects?。
Brightway2中的锁定是使用fasteners库完成的。如果你有两个python解释器正在运行,或者没有正确退出ipython笔记本(你应该在完全关闭进程之前关闭或重启内核),项目目录中会有一个锁文件,你会得到有关读取的错误 - 只有项目。顺便说一句,关闭一个ipython笔记本不足以关闭python内核或释放锁。
很难诊断为什么这些错误可能与您报告的内容一起发生。请尝试以下方法:
1)看看你是否可以将ecoinvent导入一个新项目。
2)尝试重新启动计算机。
3)如果无法正常工作,可以在命令行或资源管理器窗口中删除文件C:\Users\@@@\AppData\Local\pylca\Brightway3\myproject.4da39212894ad06eb7c95810f8a2a6b0\write-lock
。
4)在下一个答案中执行@Mpa建议,然后设置projects.read_only = False
。
答案 1 :(得分:1)
我过去遇到过这种情况,肯定是因为@Chris引起的原因。
您可以使用projects.read_only = False
强制写入数据。请确保这确实是您想要做的。您将不想要这样做,例如,如果您通过两个可能尝试同时写入数据的不同内核访问同一个项目。