好的我发现了问题,这是一个环境问题,我在sys.path上有相同的模块(减去options.py),而是从那里导入。谢谢大家的帮助。
我有一系列的import语句,其中最后一个不起作用。知道为什么吗? options.py和其他所有目录都在同一个目录中。
from snipplets.main import MainHandler
from snipplets.createnew import CreateNewHandler
from snipplets.db import DbSnipplet
from snipplets.highlight import HighLighter
from snipplets.options import Options
ImportError:没有名为options的模块
snipplets目录中的__init__.py文件为空。
答案 0 :(得分:2)
我怀疑您的其他导入之一使用赋值语句重新定义了snipplets
。或者您的其他模块之一已更改sys.path
。
修改强>
“所以流程如下:将snipplets包添加到路径导入...”
没有
不要修改sys.path
- 这种方式存在问题。修改site.path
会导致路径上有什么 - 或不是 - 的模糊性,以及它们的顺序。
最简单,最可靠,最明显,最可控的事情如下。选择一个。
定义PYTHONPATH
(一次,在程序外部)。一个简单的环境变量,几乎与站点包上的安装完全相同。
在网站包中安装您的包。
答案 1 :(得分:2)
您的master branch没有options.py
。难道你的开发和主分支是冲突的吗?
if this is your actual code然后您在第21行有option
变量。
答案 2 :(得分:1)
以下是否有效?
import snipplets.options.Options
如果是这样,您的其他一个snipplet文件可能会设置一个名为options的全局变量。
答案 3 :(得分:1)
__
初始化__
。py文件中定义__
所有__
列表,如标记为here。除非你导入*,否则它应该没有区别,但我看到模块不能导入,除非它们是在那里定义的。
其次,您可以尝试设置virtualenv。使用大量的站点范围的python包可以导致这些事情。
最后,请确保正确设置选项的权限。我花了好几个小时试图解决这些问题只是为了发现这是我无权导入它的问题。