Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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_Python 2.7 - Fatal编程技术网

有人能解释一下为什么python可以';找不到这些模块?

有人能解释一下为什么python可以';找不到这些模块?,python,python-2.7,Python,Python 2.7,我试图掌握Python 2.7中模块/包的诀窍。我在/Users/me/dir中有一个名为tmp.py的文件 import mypackage.datamanagement.lib.models from mypackage.datamanagement.lib.models import Order 我可以这样运行它 $pwd #/Users/me/dir $python tmp.py #runs fine 一切正常 但是,如果我将tmp.py复制到包中的其他位置 $cp tmp.p

我试图掌握Python 2.7中模块/包的诀窍。我在/Users/me/dir中有一个名为tmp.py的文件

import mypackage.datamanagement.lib.models
from mypackage.datamanagement.lib.models import Order
我可以这样运行它

$pwd   #/Users/me/dir
$python tmp.py  #runs fine
一切正常

但是,如果我将tmp.py复制到包中的其他位置

$cp tmp.py mypackage/datamanagement/scrips/ 
然后尝试从/Users/me/dir-I-get使用
$python-mypackage/datamanagement/scripts/tmp.py
运行它

File "mypackage/datamanagement/scrips/tmp.py", line 1, in <module>
import mypackage.datamanagement.lib.models
ImportError: No module named mypackage.datamanagement.lib.models 
我得到一个空行


有人能解释一下发生了什么事吗?python工作目录是否由python文件的位置设置?而不是执行python的位置?

如果您试图使用本地python模块,在您的情况下,“lib”将是“tmp.py”模块的目录:


来源:

当您在当前工作目录
/Users/me/dir
中运行
tmp.py
时,它会查找名为
/Users/me/dir/mypackage
的子目录,因此如果它工作,它一定找到了一个子目录。当您将它复制到
/Users/me/dir/mypackage/datamanagement/scrips
并运行它时,它查找名为
/Users/me/dir/mypackage/datamanagement/scrips/mypackage
的子目录,当然没有找到。顺便说一句,“脚本”中有一个“t”<代码>;-)。虽然您可能可以更改
$PYTHONPATH
来修复此问题,但这通常不是一个好方法。问题是您的软件包尚未正式安装。您可以通过将带有软件包根目录绝对路径的
.pth
文件添加到
/PythonXX/Lib/site packages
目录来实现这一点。请参阅.Im中有关
.pth
文件的信息。我没有使用IDLE,所以只使用$echo PYTHONPATH=。如果你想更新你的答案。我正试图帮助你使用sys.path访问你的模块。
echo $PYTHONPATH
import os, sys
lib_path = os.path.abspath(os.path.join('..', '..', '..', 'lib'))
sys.path.append(lib_path)

import mymodule