有人能解释一下为什么python可以';找不到这些模块?
我试图掌握Python 2.7中模块/包的诀窍。我在/Users/me/dir中有一个名为tmp.py的文件有人能解释一下为什么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
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