python - ImportError: No module named ...(但我有 __init__.py 文件并设置了 PYTHONPATH)
问题描述
我知道这个问题被问了一遍又一遍,但是看看这里所有类似的问题,我似乎找不到任何与我已经尝试过的答案有很大不同的答案......如果这真的是重复的,请道歉。
我有一个简单的python 包,它写了一个叫做“clam”的包。但是当我尝试从中导入一个模块时,我得到 ImportError: no module named ... 错误。
但是,如果我直接导入模块,我不会收到错误消息:
import libClam <-- this works.
我在这里查看了许多类似的问题,看看我做错了什么,但他们似乎都建议做我已经做过的事情(将我的 PYTHONPATH 设置为指向我尝试导入的模块的父目录并添加一个名为:
__init__.py
位于该目录中)。我也倾注了这个页面:
https://docs.python.org/2/tutorial/modules.html
(特别是第 6.4 节包)
这是我的 shell 的简短输出:
bvz@manjaro-xps15:~/Documents/dev/clam$ pwd
/home/bvz/Documents/dev/clam
bvz@manjaro-xps15:~/Documents/dev/clam$ ls -l
total 56
-rwxrwxrwx 1 bvz users 348 Apr 7 14:48 clamError.py
-rw-r--r-- 1 bvz users 769 Apr 7 14:48 clamError.pyc
-rw-r--r-- 1 bvz users 0 Apr 10 22:23 __init__.py
-rw-r--r-- 1 bvz users 127 Apr 3 20:10 __init__.pyc
-rwxrwxrwx 1 bvz users 7782 Apr 10 22:32 libClam.py
-rw-r--r-- 1 bvz users 7006 Apr 10 22:32 libClam.pyc
-rwxrwxrwx 1 bvz users 13602 Apr 10 19:06 libClarisse.py
-rw-r--r-- 1 bvz users 11585 Apr 10 22:19 libClarisse.pyc
-rwxrwxrwx 1 bvz users 0 Apr 7 12:28 parking.py
bvz@manjaro-xps15:~/Documents/dev/clam$ cat __init__.py
bvz@manjaro-xps15:~/Documents/dev/clam$ env | grep PYTHONPATH
PYTHONPATH=/home/bvz/Documents/dev/squirrel:/home/bvz/Documents/dev/clam:
bvz@manjaro-xps15:~/Documents/dev/clam$ python2
Python 2.7.15 (default, Jan 10 2019, 23:20:52)
[GCC 8.2.1 20181127] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/bvz/Documents/dev/squirrel', '/home/bvz/Documents/dev/clam', '/usr/lib/python27.zip', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/lib/python2.7/site-packages', '/usr/lib/python2.7/site-packages/setuptools-39.1.0-py2.7.egg']
>>> import clam.libClam
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named clam.libClam
>>> from clam import libClam
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named clam
>>> import libClam
>>>
注意简单语句的最后一行:
import libClam
作品。所以显然我已经成功设置了我的 PYTHONPATH,但不知何故它无法将父目录识别为一个包。
python 3.7 是这台机器上的默认安装(即,如果我输入“python”,我会得到一个 python 3.7 会话)。但是这段代码需要在 DCC 包中运行,该包仍然仅限于 python 2.7。这可能是问题的一部分吗?
对于这个问题的基本性质,我感到很抱歉,但即使尝试做我所有的尽职调查和研究,我也会想出一个空白。谢谢。
解决方案
导入应该与您运行 Python 的目录相关。由于您当前的工作目录已经在里面clam
,您不应该将它包含在您的导入中。相反,请执行以下操作:
import libClam
推荐阅读
- laravel - 你如何更改为laravel语法?
- python - 在熊猫df中移动等于特定值的行
- ruby - 使用电子表格 Gem 编写 Excel 电子表格
- c# - 给定两个角点计算图像的旋转度?
- python - 如何在 Python 中使用带有 TkInter 的键盘绑定来更改组合框值/索引?
- javascript - 了解不同的拖放参数?
- angular - IIS 子应用程序中未加载防伪令牌
- python - 如何将此字符串从此 Base64 转换为 img .jpg?
- android-source - AOSP 为 aosp_x86_64-eng 同时构建 x86 和 x64
- ruby-on-rails - 使用 tty-command gem 将密码写入控制台