Python 同名模块的两个实现导入问题

Python 同名模块的两个实现导入问题,python,import,package,caffe,Python,Import,Package,Caffe,我使用两个构建在caffe之上的库:crf-rnn()和hed(),前者用于语义图像分割,后者用于轮廓检测。最后,我意识到如何让它们一起工作来进行目标跟踪,但现在我面临一个尴尬的问题:由于两者都是在caffe之上构建的,所以它们导入相同的包,但每个包的内容都非常不同,即crf rnn使用caffe。hed没有的分段器和ed使用caffe。crf rnn没有的测试 Python不允许导入两个同名的包。我试图找到一种解决方法,将hed放在一个单独的Python文件中,并在主脚本中导入它,然后对其中一

我使用两个构建在caffe之上的库:crf-rnn()和hed(),前者用于语义图像分割,后者用于轮廓检测。最后,我意识到如何让它们一起工作来进行目标跟踪,但现在我面临一个尴尬的问题:由于两者都是在caffe之上构建的,所以它们导入相同的包,但每个包的内容都非常不同,即crf rnn使用caffe。hed没有的分段器和ed使用caffe。crf rnn没有的测试

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:

/CMAKE文件

./cmakfiles/pycaffe.dir

./cmakfiles/pycaffe.dir/caffe

/咖啡馆

./caffe/imagenet

/caffe/proto

/咖啡/测试

编辑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
的目录,其中包含一个
\uuuu init\uuuuuuuuuy.py
文件,请将
caffe
重命名为
espresso
,并在代码中简单地:

import espresso
(如果它只是一个
caffe.py
文件,请重命名为
espresso.py
,尽管如果同一目录中有其他模块,问题可能更大,值得一试)

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

print(xxx.__file__)

(有疑问时有用)

好的,所以我找到了最不复杂的解决方案:我编写了两个脚本,一个用于crf rnn,生成我在完整数据集上运行一次的blob并存储输出


然后我编写了第二个脚本,使用hed edge detector,我每次检测和跟踪对象时都会使用它。

你的意思是你试图重命名一个caffe包,但它不起作用?是的,即使我更改pythonpath中的路径,并重新导入caffe,我得到的包仍然是具有上一个包路径的包。如果我为crf rnn导入,然后为hed导入,这就是发生的情况更改路径不会剪切它,但重命名应该可以工作。你能发布代码片段吗?并描述两个
caffe
文件树?除了插入路径外,还必须重命名其中一个
caffe.py
文件。导入后,导入另一个同名模块不会有任何作用。您同意不可能在pythonpath中创建一个文件
caffe_1.py
,并且您没有弄错(除非您忘记了下划线)?你能描述一下你的目录结构吗?我添加了一个目录结构。我很惊讶这不是一个非常广为人知的问题,因为在caffeI之上有很多构建,这些都是目录名。因此,您可以将
caffe
目录重命名为
espresso
,您将能够在相同的上下文中导入espresso和caffe。把它们视为不同的产品。