在我的Django项目中,我有一个名为app的应用程序profile,它主要包含我的profile.models.UserProfile类以获取有关User对象的其他信息(对Django人来说可能很熟悉).现在我已经将一些初始化代码放入profile/__init__.py(某些信号)并遇到了一个问题:Django告诉我hotshot_profile没有找到一个名为的表.
经过几个小时的搜索,我将问题追溯到导入订单.跑步python -v manage.py test我发现了以下内容:
import nose.plugins.prof # precompiled from /home/rassie/.virtualenvs/myproject/lib/python2.6/site-packages/nose/plugins/prof.pyc
import hotshot # directory /usr/lib64/python2.6/hotshot
import hotshot # precompiled from /usr/lib64/python2.6/hotshot/__init__.pyc
dlopen("/home/rassie/.virtualenvs/myproject/lib64/python2.6/lib-dynload/_hotshot.so", 2);
import _hotshot # dynamically loaded from /home/rassie/.virtualenvs/myproject/lib64/python2.6/lib-dynload/_hotshot.so
import hotshot.stats # from /usr/lib64/python2.6/hotshot/stats.py
import profile # directory /home/rassie/MyProject/apps/profile
import profile # precompiled from /home/rassie/MyProject/apps/profile/__init__.pyc
Run Code Online (Sandbox Code Playgroud)
所以我的Nose跑步者输入nose.plugins.prof(即使这个插件已关闭),导入hotshot,尝试导入profile.但是,profile从我的项目中导入,而它应该已经从系统Python导入.
显然,我自己的profile模块与系统profile模块冲突.我显然不能从我自己的编程中排除与Python捆绑在一起的每个模块名称.所以问题是,我从哪里开始?我是否必须myproject为我的所有应用创建命名空间?Django会与之合作吗?
PS:Table的名称hotshot_profile似乎来自于另一个尚未完全分析的命名冲突,其中包含一个 …
我使用Python execfile()函数作为处理配置文件的一种简单但灵活的方式 - 基本上,这个想法是:
# Evaluate the 'filename' file into the dictionary 'foo'.
foo = {}
execfile(filename, foo)
# Process all 'Bar' items in the dictionary.
for item in foo:
if isinstance(item, Bar):
# process item
Run Code Online (Sandbox Code Playgroud)
这要求我的配置文件可以访问Bar类的定义.在这个简单的例子中,这是微不足道的; 我们可以定义foo = {'Bar' : Bar}而不是空字典.但是,在实际示例中,我有一个我想要加载的整个模块.一个明显的语法是:
foo = {}
eval('from BarModule import *', foo)
execfile(filename, foo)
Run Code Online (Sandbox Code Playgroud)
但是,我已经BarModule在我的顶级文件中导入了,所以看起来我应该能够直接定义foo为由一组定义的东西BarModule,而不必通过这个eval和import.
有一种简单的惯用方法吗?
我想在一个包下收集多个Python模块,因此它们不会从全局的python包和模块集中保留太多名称.但我用C编写的模块有问题.
这是一个非常简单的例子,直接来自官方Python文档.您可以在此处的页面底部找到它:http://docs.python.org/distutils/examples.html
from distutils.core import setup
from distutils.extension import Extension
setup(name='foobar',
version='1.0',
ext_modules=[Extension('foopkg.foo', ['foo.c'])],
)
Run Code Online (Sandbox Code Playgroud)
我的foo.c文件看起来像这样
#include <Python.h>
static PyObject *
foo_bar(PyObject *self, PyObject *args);
static PyMethodDef FooMethods[] = {
{
"bar",
foo_bar,
METH_VARARGS,
""
},
{NULL, NULL, 0, NULL}
};
static PyObject *
foo_bar(PyObject *self, PyObject *args)
{
return Py_BuildValue("s", "foobar");
}
PyMODINIT_FUNC
initfoo(void)
{
(void)Py_InitModule("foo", FooMethods);
}
int
main(int argc, char *argv[])
{
// Pass argv[0] to the Python interpreter
Py_SetProgramName(argv[0]);
// Initialize the Python …Run Code Online (Sandbox Code Playgroud) 我试图在命令提示符下安装Python模块.方向声明运行"./configure"以安装模块然后运行make命令.但是,每当我这样做,我都会收到错误
'.' is not recognized as an internal or external command,
operable program or batch file.
我使用命令提示符和Python仍然相对较新,所以这可能是一个非常新手的问题.从我从其他问题中读到的,似乎命令提示符应该自动识别./命令,所以我的唯一猜测就是我的%PATH%变量可能会欺骗它.任何想法或建议将不胜感激.提前致谢.
编辑:使用Windows 7我也尝试使用pip,但它说'找不到满足要求配置的任何下载'该模块是扑克引擎 我得到了最新版本.
我将一个包含大量方法的大型python文件拆分成几个较小的方法.但是,有一个问题:我希望所有这些小文件都能导入几乎相同的模块.
我试图创建一个header.py文件,我只是粘贴了公共标题.我已经添加from header import *了其他的,但在我看来,这只会导入列出的方法header.py,而不是实际的模块.
我知道一个解决方案是找出每个小文件所依赖的库,但是没有更快的方法吗?
我是Python C-API和模块创建的新手.我试图创建一个c-hash python模块.我使用python 3.4.3和TDM-gcc(64bit)4.9.2进行Windows上的编译.
这是我的代码:
// hash_mod.c
#include <Python.h>
unsigned long _hash(unsigned char const* str)
{
unsigned long hash = 5381;
int c;
int i;
i = 0;
while (str[i] != '\0')
{
c = str[i];
hash = ((hash << 5) + hash) + c;
++i;
}
return hash;
}
static PyObject*
hash_hash(PyObject* self, PyObject* args)
{
unsigned char const* str;
if (!PyArg_ParseTuple(args, "s", &str))
return NULL;
return PyLong_FromUnsignedLong(_hash(str));
}
static PyMethodDef HashMethods[] = {
{"hash", hash_hash, METH_VARARGS, "String Hash"}, …Run Code Online (Sandbox Code Playgroud) 我在先前运行Python 2.6的SLES 11盒子上安装了Python 2.7.为此,我使用了本文中描述的脚本并以root用户身份运行它.一切顺利,但一旦完成,我发现了一些问题:
/opt/python2.7/binImportError: No module named pkg_resources PS关注@user建议我尝试添加从sys.pathroot用户获取的以下路径.bashrc,但没有解决问题
export PYTHONPATH=$PYTHONPATH:/opt/python2.7/lib/python27.zip:/opt/python2.7/lib/python2.7:/opt/python2.7/lib/python2.7/plat-linux2:/opt/python2.7/lib/python2.7/lib-tk:/opt/python2.7/lib/python2.7/lib-old:/opt/python2.7/lib/python2.7/lib-dynload:/opt/python2.7/lib/python2.7/site-packages:/opt/python2.7/lib/python2.7/site-packages/PyYAML-3.11-py2.7-linux-x86_64.egg:/opt/python2.7/lib/python2.7/site-packages/pexpect-4.2.0-py2.7.egg:/opt/python2.7/lib/python2.7/site-packages/ptyprocess-0.5.1-py2.7.egg
Run Code Online (Sandbox Code Playgroud) 在过去的几个小时中,我一直在使用Google搜索,在任何地方都找不到等效的问题。此外,2.7和3.5的文档似乎相同,因此我认为没有记录这种行为。
这是我的目录结构:
project
-- project.py
-- api
-- __init__.py
-- subapi
-- __init__.py
Run Code Online (Sandbox Code Playgroud)
的内容project/project.py:import api
的内容project/api/__init__.py:import subapi
如果我python project.py从projects文件夹中执行(使用python 2.7),它将返回而不会出现错误。如果我对python 3(python3 project.py)执行相同操作,则崩溃
Traceback (most recent call last):
File "project.py", line 1, in <module>
import api
File "/home/me/Documents/project/api/__init__.py", line 1, in <module>
import subapi
ImportError: No module named 'subapi'
Run Code Online (Sandbox Code Playgroud)
如果我重写import语句以使用相对于项目目录(import api.subapi)的路径,则它适用于python 2和3。虽然这不是令人满意的解决方案,因为这要求我从子模块中引用父模块,这会导致失败。模块化的思想
有谁知道我该怎么做才能恢复python2的行为?模块搜索算法应优先使用import语句在文件的本地目录中搜索。顺便说一句,它还应优先考虑上述内置模块中的这些文件。尝试导入模块“测试”。
-编辑-stackoverflow要求我将我的问题与另一个称为“如何进行相对进口”的问题区分开。我认为这个问题有所不同,因为我专门询问两个版本之间的差异。使用相对导入是解决方案,而不是问题。
如果元类没有
__prepare__属性,则将类命名空间初始化为空有序映射.
定义顺序是否也保留在模块对象中?
# foo_bar.py
def foo():
pass
def bar():
pass
Run Code Online (Sandbox Code Playgroud)
我已经尝试了上面的模块(也交换了顺序),它似乎确实可靠:
>>> import foo_bar
>>> for name in foo_bar.__dict__:
... if not name.startswith('_'):
... print(name)
...
foo
bar
Run Code Online (Sandbox Code Playgroud)
据推测,该模块命名空间还采用了紧凑字典底下,或者从一个事实,即遵循type(foo_bar)是<class 'module'>,它也必须尊重定义顺序,像任何其他类.但是,我不确定这是否是Python保证的功能,或者只是CPython实现细节. 模块中的名称是否需要遵守定义排序?
我有一个reqs.txt文件,包含我需要在第二台计算机上安装的许多python要求.该文件如下所示:
alabaster==0.7.9
anaconda-client==1.6.0
anaconda-navigator==1.4.3
astroid==1.4.9
astropy==1.3
Babel==2.3.4
backports.shutil-get-terminal-size==1.0.0
beautifulsoup4==4.5.3
bitarray==0.8.1
blaze==0.10.1
...
Run Code Online (Sandbox Code Playgroud)
我在用
pip3 install -r reqs.txt --requirement=reqs.txt
Run Code Online (Sandbox Code Playgroud)
我明白了
me@pc:~$ pip3 install -r reqs.txt --requirement=reqs.txt
Collecting alabaster==0.7.9 (from -r reqs.txt (line 1))
Using cached alabaster-0.7.9-py2.py3-none-any.whl
Collecting anaconda-client==1.6.0 (from -r reqs.txt (line 2))
Could not find a version that satisfies the requirement anaconda-client==1.6.0 (from -r reqs.txt (line 2)) (from versions: 1.1.1, 1.2.2)
No matching distribution found for anaconda-client==1.6.0 (from -r reqs.txt (line 2))
Run Code Online (Sandbox Code Playgroud)
对于该reqs.txt文件中的每个包.有任何想法吗?
编辑:reqs.txt文件是用pip freeze.创建的.即使我删除了版本号,它们仍然无法安装.但是,如果我做了一个
pip3 install alabaster …Run Code Online (Sandbox Code Playgroud) python-module ×10
python ×7
django ×2
pip ×2
python-2.7 ×2
python-3.x ×2
c ×1
distutils ×1
installation ×1
path ×1
python-3.5 ×1
python-3.6 ×1
windows ×1