当我开始金字塔pserve我得到这个堆栈跟踪:
% python $(which pserve) ../etc/development.ini
Traceback (most recent call last):
File "/home/hughdbrown/.local/bin/pserve", line 9, in <module>
load_entry_point('pyramid==1.5', 'console_scripts', 'pserve')()
File "/home/hughdbrown/.virtualenvs/ponder/local/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/scripts/pserve.py", line 51, in main
return command.run()
File "/home/hughdbrown/.virtualenvs/ponder/local/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/scripts/pserve.py", line 316, in run
global_conf=vars)
File "/home/hughdbrown/.virtualenvs/ponder/local/lib/python2.7/site-packages/pyramid-1.5-py2.7.egg/pyramid/scripts/pserve.py", line 340, in loadapp
return loadapp(app_spec, name=name, relative_to=relative_to, **kw)
File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 247, in loadapp
return loadobj(APP, uri, name=name, **kw)
File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 271, in loadobj
global_conf=global_conf)
File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 296, in loadcontext
global_conf=global_conf)
File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 320, in _loadconfig
return loader.get_context(object_type, name, global_conf)
File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 454, in get_context
section)
File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 476, in _context_from_use
object_type, name=use, global_conf=global_conf)
File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 406, in get_context
global_conf=global_conf)
File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 296, in loadcontext
global_conf=global_conf)
File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 337, in _loadfunc
return loader.get_context(object_type, name, global_conf)
File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/loadwsgi.py", line 681, in get_context
obj = lookup_object(self.spec)
File "/home/hughdbrown/.virtualenvs/ponder/lib/python2.7/site-packages/PasteDeploy-1.5.2-py2.7.egg/paste/deploy/util.py", line 68, in lookup_object
module = __import__(parts)
File "/home/hughdbrown/.virtualenvs/ponder/local/lib/python2.7/site-packages/ponder-0.0.40-py2.7.egg/ponder/server/__init__.py", line 10, in <module>
from ponder.server.views import Endpoints, route
ImportError: No module named views
这工作正常,从蟒蛇REPL:
% python
Python 2.7.5+ (default, Feb 27 2014, 19:37:08)
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ponder.server.views import Endpoints, route
>>>
和从命令行导入:
% python -c "from ponder.server.views import Endpoints, route"
删节tree
输出显示了我与合作:
% tree
├── __init__.py
├── ponder
│ ├── __init__.py
│ ├── server
│ │ ├── __init__.py
│ │ └── views
│ │ ├── environment_templates.py
│ │ ├── groups.py
│ │ ├── __init__.py
│ │ ├── instances.py
│ │ ├── tasks.py
│ │ └── users.py
我PYTHONPATH
设置为这棵树的根:
% echo $PYTHONPATH
/home/hughdbrown/workspace/ept/ponder/lib
我在使用Python 2.7的virtualenv运行此。我有这方面的工作和关闭,但今天我不能找出问题的所在。一方面,该__init__.py
似乎好一些的进口,只是未到以前
from .database import get_db
from .config import parser
from .views import Endpoints, route
(我改变了最后一行的绝对进口,没有运气。)
我已经试过的东西:
PYTHONPATH
我愿意进一步如何调试这个错误的建议。
所以我所犯的错误是只查看源代码树。问题是真的在运行时环境,在我的virtualenv。当我看着那里,我发现没有安装所需的文件。这个问题,从根本上讲是setup.py
。
我惯用的伎俩是简单地在进口问题发生的实际情况下打印sys.path
。在你的情况下,它会似乎是对印刷品的地方是在/home/hughdbrown/.local/bin/pserve
。然后,检查显示目录和文件在该路径显示的地方..
你做到这一点,首先有:
import sys
和在Python 2与打印表达式:
print sys.path
或在Python 3与打印功能:
print(sys.path)
如果您在另一个目录中具有相同名称的脚本作为模块,它将使用代替。例如:
module.py
module
|
|--module
| |
| |--__init__.py
| |--module.py
这将让这个正在使用的第一module.py,没有第二个。
我得到这个时候我没有输入正确的事情。我有
__init.py__
代替
__init__.py
我设置了PYTHONPATH
到'.'
并解决它适合我。
export PYTHONPATH='.'
对于一个班轮你可以为很容易做到:
PYTHONPATH='.' your_python_script
预计这些命令在终端中运行
我有同样的问题,我通过添加以下代码到Python文件的顶部解决它:
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
os.path.dirname
的重复次数取决于其中文件位于您的项目层次结构。举例来说,在我的情况下,项目的根是三个层次的。
我遇到了同样的问题,我尝试错误行前的pdb.set_trace()。
我的问题是包的名称与模块名称重复,如:
test
├── __init__.py
├── a
│ ├── __init__.py
│ └── test.py
└── b
└── __init__.py
在文件a/__init__.py
,使用from test.b import xxx
会造成ImportError: No module named b
。
他们通过多种方式来运行python脚本:
每一种方法都可以运行不同版本的Python(¤)
检查哪些Python版本是由CMD运行:键入CMD:
python --version
检查哪些Python版本上的.py单击后运行:
选项1:
创建一个包含这一个test.py:
import sys print (sys.version)
input("exit")
选项2:
键入在cmd中:
assoc .py
ftype Python.File
检查路径,如果模块(例如:win32clipboard)在cmd中确认:
创建一个包含这一个test.py:
python
import sys
sys.executable
sys.path
import win32clipboard
win32clipboard.__file__
检查路径和模块是否在公认的.py
创建一个包含这一个test.py:
import sys
print(sys.executable)
print(sys.path)
import win32clipboard
print(win32clipboard.__file__)
如果在cmd中的版本确定,但不是在的.py这是因为与相关的.py的默认程序是不正确的。更改蟒蛇版本的.py
要更改与CMD相关的Python版本:
Control Panel\All Control Panel Items\System\Advanced system setting\Environnement variable
系统变量的path
变量设置为你蟒版本(由;
分开的路径:CMD使用第一路径例如:C:\路径\到\ Python27; C:\路径\到\ Python35→CMD将使用python27)
要更改与扩展名为.py相关的Python版本:
运行CMD为管理:
写:ftype Python.File="C:\Python35\python.exe" "%1" %*
将设置最后的Python版本(例如python3.6)。如果您的最后一个版本是3.6,但是你想3.5只需添加一些XXX文件夹(xxxpython36)中,以便其将采取的最后一个公认的版本,这是python3.5(后cmd中删除XXX)。
其他:
“无模块错误”也可能来自一个语法错误,顺便说一句蟒蛇等3(例如缺少打印功能括号...)
¤因此,他们每个人都有自己的点子版本
我有这个问题太,我刚刚忘了执行我的计划之前,请在终端workon的myproject。
该PYTHONPATH
设置不正确。使用export PYTHONPATH=$PYTHONPATH:/path/to/your/modules
导出。
我遇到过同样的问题。我在不同的Python版本上运行该命令解决了这个问题。我试过python3 filename.py
。早些时候,我使用Python 2.7。
另一种可能性是从哪个东西是导入的文件可能包含BOM(字节顺序标记)。它可以通过在支持多种编码像VSCode(记事本++)一些编辑器中打开该文件并保存在不同的编码statndard像ANSI,UTF-8(无BOM)来解决。
在这种情况下感兴趣的是谁,我当我在Cygwin中运行的Python,在我的情况下,它是complaning,大熊猫,即使是未安装有同样的问题。问题是,我有蟒2个安装 - 一个在Windows和另一位在Cygwin的(使用cygwin的安装程序),虽然两人都Python的相同版本,在Cygwin安装感到困惑安装熊猫在哪里。当我卸载Cygwin的Python和在Windows安装都指出Cygwin的很好