gpt4 book ai didi

python - 同名模块的两种实现-导入问题

转载 作者:太空宇宙 更新时间:2023-11-03 16:16:39 24 4
gpt4 key购买 nike

我使用两个构建在 caffe 之上的库:crf-rnn( https://github.com/torrvision/crfasrnn/tree/master/python-scripts ) 和 hed( https://github.com/s9xie/hed/blob/master/examples/hed/ ),前者用于语义图像分割,后者用于轮廓检测。最后,我意识到如何让它们一起工作以进行对象跟踪,但现在我面临一个尴尬的问题:由于两者都构建在 caffe 之上,它们导入相同的包,但各自的内容却截然不同,即 crf-rnn 使用hed 没有的 caffe.Segmenter ,而 ed 使用 crf-rnn 没有的 caffe.TEST 。

Python 不允许导入两个同名的包。我尝试找到一种解决方法,将 hed 放入单独的 Python 文件中并将其导入主脚本中,并使用 as 为其中一个包import caffe as cf ,但到目前为止还没有任何结果。

有什么建议吗?

编辑:这是一个名为 Aux.py

的文件
def import_hed_caffe():
import sys,os
caffe_dir = '/home/alex/Downloads/hed/python'
sys.path.insert(0,caffe_dir)
hed_model = 'deploy.prototxt'
hed_pretrained = 'hed_pretrained_bsds.caffemodel'
import caffe as cf
net = cf.Net(hed_model, hed_pretrained, cf.TEST)
return net

这是主要脚本:

caffe_root = '../caffe-crfrnn/'
sys.path.insert(0, caffe_root + 'python')
import caffe as espresso
import AuxScript
net = espresso.Segmenter(MODEL_FILE, PRETRAINED, gpu=False)
a=AuxScript.import_hed_caffe()

我得到

AttributeError: 'module' object has no attribute 'TEST'

不用说,单独一切都工作正常,所以这只是导入

编辑2:

./CMakeFiles

./CMakeFiles/pycaffe.dir

./CMakeFiles/pycaffe.dir/caffe

./咖啡

./caffe/imagenet

./caffe/proto

./caffe/测试

编辑3:

├── caffe
│   ├── _caffe.cpp
│   ├── _caffe.so -> /home/alex/Downloads/hed/lib/_caffe.so
│   ├── classifier.py
│   ├── classifier.pyc
│   ├── detector.py
│   ├── detector.pyc
│   ├── draw.py
│   ├── imagenet
│   │   └── ilsvrc_2012_mean.npy
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── io.py
│   ├── io.pyc
│   ├── net_spec.py
│   ├── net_spec.pyc
│   ├── proto
│   │   ├── caffe_pb2.py
│   │   └── __init__.py
│   ├── pycaffe.py
│   ├── pycaffe.pyc
│   └── test
│   ├── test_layer_type_list.py
│   ├── test_net.py
│   ├── test_net_spec.py
│   ├── test_python_layer.py
│   ├── test_python_layer_with_param_str.py
│   └── test_solver.py
├── classify.py
├── CMakeFiles
│   ├── CMakeDirectoryInformation.cmake
│   ├── progress.marks
│   └── pycaffe.dir
│   ├── build.make
│   ├── caffe
│   │   └── _caffe.cpp.o
│   ├── cmake_clean.cmake
│   ├── CXX.includecache
│   ├── DependInfo.cmake
│   ├── depend.internal
│   ├── depend.make
│   ├── flags.make
│   ├── link.txt
│   └── progress.make
├── cmake_install.cmake
├── CMakeLists.txt
├── detect.py
├── draw_net.py
├── Makefile
├── requirements.txt

最佳答案

我已经看到了您的最后一次编辑,我必须说,在您的上下文中更改/篡改 python sys.path 是必要的,但在这里还不够:您必须重命名其中一个 caffe 包。

例如:如果 caffe 包是一个名为 caffe 的目录,其中包含 __init__.py 文件,请重命名 caffe > 到 espresso 并在您的代码中简单地:

import espresso

(如果只是一个caffe.py文件,请重命名为espresso.py,尽管如果同一目录中有其他模块可能会出现更多问题,但值得尝试一下)

顺便说一句:当导入模块时,例如xxx,您可以通过键入以下内容知道它正在使用哪个完整文件路径:

print(xxx.__file__)

(当你有疑问时很有用)

关于python - 同名模块的两种实现-导入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38900099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com