相关疑难解决方法(0)

用Python设置sys.path的时间是什么时候?

我跑的时候

import sys 
print sys.path
Run Code Online (Sandbox Code Playgroud)

在我的Mac(Mac OS X 10.6.5,Python 2.6.1)上,我得到以下结果.

/Library/Python/2.6/site-packages/ply-3.3-py2.6.egg
...
/Library/Python/2.6/site-packages/ipython-0.10.1-py2.6.egg
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages

/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old
/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload
/Library/Python/2.6/site-packages
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode

它们分为5类.

  • /Library/Python/2.6/site-packages/*.egg
  • /Library/Python/2.6/site-packages
  • 框架/ Python.framework /版本/ 2.6/lib中/ python2.6的
  • 框架/ Python.framework /版本/ 2.6 /额外/ lib中/蟒蛇
  • 来自PYTHONPATH环境变量的PATH.

我可以使用代码添加更多路径

sys.path.insert(0, MORE_PATH)
Run Code Online (Sandbox Code Playgroud)
  • 什么例程设置这些路径,什么时候?
  • 有些路径是用python源代码构建的吗?
  • 是否有可能忽略使用'sys.path.insert'插入的路径?我对此很好奇,就像mod_wsgi一样,我发现'sys.path.insert'找不到路径.我问了另一个帖子这个问题.

添加

根据Michael的回答,我调查了site.py,并得到了以下代码.

def addsitepackages(known_paths):
    """Add site-packages (and possibly site-python) to sys.path"""
    sitedirs = []
    seen = []

    for prefix in PREFIXES:
        if not prefix or prefix in seen:
            continue
        seen.append(prefix)

        if sys.platform …
Run Code Online (Sandbox Code Playgroud)

python path

64
推荐指数
3
解决办法
5万
查看次数

我的Ubuntu系统上有Python,但是gcc找不到Python.h

我在学校的电脑上,所以我无法安装任何东西.

我正在尝试创建可以在Python中运行的C代码.看来我发现的所有文章都要求你使用

#include <Python.h>
Run Code Online (Sandbox Code Playgroud)

我这样做,但是当我编译它时抱怨没有这样的文件或目录.

计算机有Python(至少它python在终端中有命令,我们可以运行我们想要的任何Python代码).

我输入locate Python.h了终端,但没有发现任何东西.

我有两个问题:

  1. 我可以编写可以在Python中调用的C代码Python.h吗?

  2. 我错过了什么,计算机实际上有Python.h吗?

c python ubuntu header

49
推荐指数
8
解决办法
9万
查看次数

你如何从C代码调用Python代码?

我想扩展一个带有一些新功能的大型C项目,但我真的想用Python编写它.基本上,我想从C代码调用Python代码.但是,像SWIG这样的Python-> C包装器允许OPPOSITE,即编写C模块并从Python调用C语言.

我正在考虑一种涉及IPC或RPC的方法(我不介意有多个进程); 也就是说,让我的纯Python组件在一个单独的进程中运行(在同一台机器上),让我的C项目通过从套接字(或unix管道)写入/读取来与之通信.我的python组件可以读/写socket来进行通信.这是一种合理的方法吗?还有更好的东西吗?像一些特殊的RPC机制?

感谢到目前为止的答案 - 但是,我想专注于基于IPC的方法,因为我希望将我的Python程序作为我的C程序在一个单独的过程中.我不想嵌入Python解释器.谢谢!

c python interop cross-domain

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

Python C API不加载模块

我正在尝试使用C API加载一个包含C中的数学和numpy导入的python模块.我可以加载并运行模块但是,如果我导入数学模块它不起作用.

我使用的是Arch Linux,Python 2.7.2和gcc.

这里的代码:

#include <stdio.h>
#include <stdlib.h>
#include <python2.7/Python.h>


int main(int argc, char **argv)
{
    PyObject *pName, *pModule, *pFunc, *pArg, *pDict, *pReturn, *pT1, *pT2, *pX, *pY;
    int i;
    double x, y;

    Py_Initialize();

    PySys_SetPath(".");

    pName = PyString_FromString("func");
    if (!pName)
    {
        printf("pName\n");
        return 0;
    }
    pModule = PyImport_Import(pName);

    pDict = PyModule_GetDict(pModule);
    pFunc = PyDict_GetItemString(pDict, "get_vals");
    pArg = PyTuple_New(2);
    PyTuple_SetItem(pArg, 0, PyFloat_FromDouble(4.0));
    PyTuple_SetItem(pArg, 1, PyFloat_FromDouble(2.0));
    pReturn = PyObject_CallObject(pFunc, pArg);
    pT1 = PyTuple_GetItem(pReturn, 0);
    pT2 = PyTuple_GetItem(pReturn, 1);

    for (i = …
Run Code Online (Sandbox Code Playgroud)

c python python-embedding python-c-api

3
推荐指数
1
解决办法
3947
查看次数