簡體   English   中英

循環依賴導致未導入?

[英]Circular Dependency caused without import?

代碼在這里

我創建了一個文件results_pb2.py 然后,我將utils.py導入此文件。

但是,當我嘗試運行utils_test.py時 ,我得到了循環依賴。 由於某種原因,results_pb2.py正在調用另一個Python程序tcav.py ,該程序通過一系列依賴項依賴於utils.py。 這是下面的完整鏈/堆棧跟蹤:

File "/usr/local/home/karanshukla/tcav/tcav/utils_test.py", line 19, in <module>
  from tcav.utils import flatten, process_what_to_run_expand, process_what_to_run_concepts, process_what_to_run_randoms
File "tcav/utils.py", line 20, in <module>
  from tcav.results_pb2 import Result, Results
File "tcav/tcav.py", line 22, in <module>
  from tcav.cav import CAV
File "tcav/cav.py", line 27, in <module>
  from tcav import utils
ImportError: cannot import name utils

奇怪的是, 我看不到results_pb2.py導入了tcav.py。 如果有人可以解釋導致此意外導入的原因,我將不勝感激。

作為參考,下面是results_pb2.py中的導入:

import sys
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database

要重現該錯誤,請安裝protoc工具(用於生成results_pb2.py),從此處拉出代碼庫,然后運行以下命令:

pip uninstall tcav
rm tcav/results_pb2.pyc tcav/results_pb2.py
protoc tcav/results.proto --python_out=.
python setup.py bdist_wheel --python-tag py2
pip install dist/tcav-0.2.1-py2-none-any.whl
python -m tcav.utils_test

這很可能是由於protoc序列化將整個tcav模塊作為依賴項而引起的。 results.proto移到tcav模塊之外,並移到新的單獨的tcav_results模塊中解決了該問題。

這似乎並不理想。 但是,它解決了由protoc序列化導致的循環依賴的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM