Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python包导入时出现问题(python路径上的本地vs)_Python_Python Import - Fatal编程技术网

从python包导入时出现问题(python路径上的本地vs)

从python包导入时出现问题(python路径上的本地vs),python,python-import,Python,Python Import,我无法在Python2.7中同时实现以下功能: 从本地包导入子模块 当包位于PYTHONPATH上时,从包中导入子模块 我已经设置了示例目录结构,如 因此,我最终得出以下结论: $ ls tmp/sound effects/ filters/ formats/ __init__.py 如果我将包设置为本地,就像它作为git子模块一样,例如,通过cdtmp,则以下操作是成功的: $ python Python 2.7.10 (default, Oct 14 2015, 16:09:02

我无法在Python2.7中同时实现以下功能:

  • 从本地包导入子模块

  • 当包位于PYTHONPATH上时,从包中导入子模块

我已经设置了示例目录结构,如

因此,我最终得出以下结论:

$ ls tmp/sound
effects/  filters/  formats/  __init__.py
如果我将包设置为本地,就像它作为git子模块一样,例如,通过
cdtmp
,则以下操作是成功的:

$ python
Python 2.7.10 (default, Oct 14 2015, 16:09:02) 
[GCC 5.2.1 20151010] on linux2
>>> from sound.effects import echo
>>> 
但是,如果我位于其他地方(
cd..
),并且我将包放在我的PYTHONPATH上,我就不能像文档中那样导入:

[~/tmp]$ cd ..
[~]$ python
Python 2.7.10 (default, Oct 14 2015, 16:09:02) 
[GCC 5.2.1 20151010] on linux2
>>> import sys
>>> sys.path.append('/home/meuser/tmp/sound')
>>> from sound.effects import echo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named sound.effects
>>> sys.path.append('/home/meuser/tmp/sound/effects')
>>> from sound.effects import echo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named sound.effects
[~/tmp]$cd。。
[~]$python
Python 2.7.10(默认值,2015年10月14日,16:09:02)
[GCC 5.2.1 20151010]关于linux2
>>>导入系统
>>>sys.path.append(“/home/meuser/tmp/sound”)
>>>从sound.effects导入回声
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:没有名为sound.effects的模块
>>>sys.path.append(“/home/meuser/tmp/sound/effects”)
>>>从sound.effects导入回声
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:没有名为sound.effects的模块

那我该怎么安排呢?

啊!如果是包,我需要路径中包含包的文件夹(即~/tmp/),而不是包本身的文件夹(~/tmp/sound)。因此,以下工作:

>>> import sys
>>> sys.path.append('/home/meuser/tmp/')
>>> from sound.effects import echo

现在我相信这解决了我最近遇到的所有难题。

让我直截了当地说:你想从机器上的任何地方导入你制作的软件包吗?是的。我有一些软件包,我维护并用于很多项目。我将它们的位置放在我的PYTHONPATH中(这不是它的用途吗?),设置在我的bash配置中。事实上,多年来我就是这样做的,但我从来没有用点来指定子模块(sound.effects)。相反,我只是在sound/下有一堆相同级别的文件(模块),我将从中显式导入。
>>> import sys
>>> sys.path.append('/home/meuser/tmp/')
>>> from sound.effects import echo