0

我在使用 Brightway2 导入 Ecoinvent 3.2 时遇到了一些问题,我正在关注示例笔记本

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:\Users\@@@\Anaconda3\envs\bw3\lib\site-packages\bw2data\project.py:157:用户警告: 只读项目

该项目正在被另一个进程使用,并且在以下情况下无法进行写入:1.您关闭另一个程序,或切换到另一个项目,以及 2.您调用projects.enable_writes 获得响应True

If you are **sure** that this warning is incorrect, call
`projects.enable_writes(force=True)` to enable writes.

警告.warn(READ_ONLY_PROJECT)

如果我跑

projects.enable_writes(force=True)

我收到另一个权限错误

PermissionError Traceback (最近一次调用最后一次) in () ----> 1 projects.enable_writes(force=True)

C:\Users\@@@\Anaconda3\envs\bw3\lib\site-packages\bw2data\project.py in enable_writes(self, force) 234 """为当前项目启用写入。""" 235 if force : --> 236 os.remove(os.path.join(self.dir, "write-lock")) 237 self.read_only = not self._lock.acquire(timeout = 0.05) 238 if not self.read_only:

PermissionError: [WinError 32] El proceso no tiene acceso al archivo porque está siendo utilizado por otro proceso: 'C:\Users\@@@\AppData\Local\pylca\Brightway3\myproject.4da39212894ad06eb7c95810f8a2a6b0\write-lock'

翻译的 winerror 类似于“该进程无权访问该文件,因为该文件正在被其他进程使用”

我没有同时运行其他 Brightway 环境,而且我最近更新了 Brightway2,所以我不知道问题可能出在哪里。有任何想法吗?

谢谢!

UPDATE1:我在另一台计算机上安装了 brightway2,我发现了相同的警告消息。尽管有消息,导入似乎是正确的。一旦数据库被加载和写入,如果我再次打开项目,数据库仍然存在。

在以前的笔记本电脑中,导入过程对于机器来说似乎太多了(带有 Windows 10 和 6 GB RAM 的 ASUS S56CB)。在等待结果 40 分钟后,我通常会绝望并杀死它。我会尝试重新安装python...

4

2 回答 2

1

了解如何解决有关只读项目的错误?.

Brightway2 中的锁定是通过紧固件库完成的。如果你有两个 python 解释器正在运行,或者没有正确退出 ipython notebook(你应该在完全关闭进程之前关闭或重新启动内核),项目目录中会有一个锁文件,你会得到关于 read 的错误- 仅限项目。顺便说一句,仅仅关闭一个 ipython notebook 并不足以关闭 python 内核或释放锁。

很难诊断为什么这些错误可能与您报告的内容一起发生。尝试以下操作:

1) 看看是否可以将 ecoinvent 导入新项目。

2) 尝试重新启动计算机。

3) 如果您无法进行任何操作,您可以C:\Users\@@@\AppData\Local\pylca\Brightway3\myproject.4da39212894ad06eb7c95810f8a2a6b0\write-lock在命令行或资源管理器窗口中删除该文件。

4)按照@Mpa 在下一个答案中的建议进行操作,然后设置projects.read_only = False.

于 2016-09-21T13:58:04.873 回答
1

我过去曾遇到过这种情况,肯定是因为@Chris 引起的原因。

您可以使用projects.read_only = False强制写入数据。请确保这确实是您想要做的。例如,如果您通过两个可能尝试同时写入数据的不同内核访问同一个项目,您将不希望这样做。

于 2016-09-26T18:06:02.860 回答