标签: python-module

如何避免在Python的模块系统中命名冲突?

在我的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 django python-module python-import

6
推荐指数
1
解决办法
434
查看次数

将python模块导入dict(在execfile()中用作全局变量)?

我使用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-module

6
推荐指数
2
解决办法
5317
查看次数

如何将我的Python C模块放入包中?

我想在一个包下收集多个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 distutils python-module

6
推荐指数
1
解决办法
1356
查看次数

在命令提示符中无法识别Dot-slash - 尝试安装Python模块

我试图在命令提示符下安装Python模块.方向声明运行"./configure"以安装模块然后运行make命令.但是,每当我这样做,我都会收到错误

'.' is not recognized as an internal or external command, operable program or batch file.

我使用命令提示符和Python仍然相对较新,所以这可能是一个非常新手的问题.从我从其他问题中读到的,似乎命令提示符应该自动识别./命令,所以我的唯一猜测就是我的%PATH%变量可能会欺骗它.任何想法或建议将不胜感激.提前致谢.

编辑:使用Windows 7我也尝试使用pip,但它说'找不到满足要求配置的任何下载'该模块是扑克引擎 我得到了最新版本.

python windows python-module path command-prompt

6
推荐指数
3
解决办法
9819
查看次数

Python"header.py"模块

我将一个包含大量方法的大型python文件拆分成几个较小的方法.但是,有一个问题:我希望所有这些小文件都能导入几乎相同的模块.

我试图创建一个header.py文件,我只是粘贴了公共标题.我已经添加from header import *了其他的,但在我看来,这只会导入列出的方法header.py,而不是实际的模块.

我知道一个解决方案是找出每个小文件所依赖的库,但是没有更快的方法吗?

python django python-module python-import

6
推荐指数
1
解决办法
1649
查看次数

C Python模块具有不寻常的内存使用

我是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)

c python-module python-3.x

6
推荐指数
1
解决办法
287
查看次数

在SLES 11上为所有用户安装Python 2.7

我在先前运行Python 2.6的SLES 11盒子上安装了Python 2.7.为此,我使用了本文中描述的脚本并以root用户身份运行它.一切顺利,但一旦完成,我发现了一些问题:

  1. 没有创建符号链接且没有更新路径,因此我不得不手动更新链接到新安装bin目录的路径 /opt/python2.7/bin
  2. 一切都运行良好,直到我从root切换到普通用户,此时Python shell运行,但我安装的一些模块如PyYAML缺失.再次,当我以root身份运行Python时,这些都可以
  3. 作为普通用户,我无法运行pip,easy_install和wheel.我得到了点子ImportError: 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)

installation pip python-module python-2.7

6
推荐指数
1
解决办法
1041
查看次数

Python 3.5 vs Python 2.7:模块导入子模块

在过去的几个小时中,我一直在使用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要求我将我的问题与另一个称为“如何进行相对进口”的问题区分开。我认为这个问题有所不同,因为我专门询问两个版本之间的差异。使用相对导入是解决方案,而不是问题。

python python-module python-2.7 python-3.5

6
推荐指数
1
解决办法
2853
查看次数

模块命名空间中的定义顺序是否可用?

据记载,类中的定义顺序被保留(参见PEP 520):

如果元类没有__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实现细节. 模块中的名称是否需要遵守定义排序?

python python-module python-datamodel python-3.6

6
推荐指数
1
解决办法
172
查看次数

Pip3给出"找不到匹配的分布......"错误

我有一个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)

pip python-module python-3.x

6
推荐指数
1
解决办法
1538
查看次数