这是一个CPython程序,试图用空的初始化解释器sys.path:
#include <Python.h>
int main(int argc, char** argv)
{
wchar_t* program = NULL;
wchar_t* sys_path = NULL;
Py_NoSiteFlag = 1;
program = Py_DecodeLocale(argv[0], NULL);
Py_SetProgramName(program);
sys_path = Py_DecodeLocale("", NULL);
Py_SetPath(sys_path);
Py_Initialize();
PyMem_RawFree(program);
PyMem_RawFree(sys_path);
Py_Finalize();
}
Run Code Online (Sandbox Code Playgroud)
执行上述程序会引发以下错误:
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'
Current thread 0x00007ffff7fc6700 (most recent call first):
Signal: SIGABRT (Aborted)
Run Code Online (Sandbox Code Playgroud)
那么除了encodings包之外,Python 3.5标准库中的哪些包和模块是运行Python 3.5解释器所必需的?在我的文档中似乎没有这些信息.
python python-embedding python-3.x python-internals python-3.5
我的项目结构如下所示:
emb
| CMakeLists.txt
| main.c
| python35.lib
| stdlib.zip
| _tkinter.pyd
|
+---include
| |
| | abstract.h
| | accu.h
| | asdl.h
...
| | warnings.h
| | weakrefobject.h
|
+---build
| | emb.exe
Run Code Online (Sandbox Code Playgroud)
stdlib.zip包含Python 3.5.2安装中的DLL,Lib和site-packages目录,其路径被追加到sys.path.我通过链接到python35.lib隐式加载python35.dll,python35.lib包含DLL中所有导出函数的存根.这是CMakeLists.txt的内容:
cmake_minimum_required(VERSION 3.6)
project(embpython)
set(SOURCE_FILES main.c)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
set(PYTHON_INCLUDE_DIR include)
include_directories(${PYTHON_INCLUDE_DIR})
target_link_libraries(
${PROJECT_NAME}
${CMAKE_CURRENT_LIST_DIR}/python35.lib
${CMAKE_CURRENT_LIST_DIR}/_tkinter.pyd)
Run Code Online (Sandbox Code Playgroud)
这是main.c的内容:
#include <Python.h>
int main(int argc, char** argv) …Run Code Online (Sandbox Code Playgroud) 我安装了 python 3.2,我想知道在安装较新版本之前是否必须卸载较早版本。
自从我开始学习Python和Pygame以来,我一直在我的代码中使用time.wait,我一直想知道是否有其他方法可以做到这一点以及每种方法的优点和缺点是什么.例如,Pygame也有一个pygame.time.wait.python的wait和pygame的等待函数有什么区别?哪一个更好?除了使用这两个函数之外还有其他方法可以等待一段时间吗?
User我在两个模型和之间有多对多关系,Role通过中间表实现,UserRoleThrough,它有两个ForeignKeyFields:一个引用User,另一个引用Role。据我从文档中了解到,ON DELETE功能是通过参数初始化来支持ForeignKeyField的on_delete。尽管不太清楚on_delete可以采用什么值,但文档给出了一个示例,例如'CASCADE'。话虽这么说,on_delete='CASCADE'似乎没有效果,因为尝试从父表之一删除行会引发错误。
peewee.IntegrityError: FOREIGN KEY constraint failed
Run Code Online (Sandbox Code Playgroud)
使用数据库浏览器检查生成的架构表明外键未使用 ON DELETE 声明。
CREATE TABLE "userrolethrough" (
"id" INTEGER NOT NULL PRIMARY KEY,
"user_id" INTEGER NOT NULL,
"role_id" INTEGER NOT NULL,
FOREIGN KEY ("user_id") REFERENCES "user" ("id"),
FOREIGN KEY ("role_id") REFERENCES "role" ("id")
)
Run Code Online (Sandbox Code Playgroud)
那么我在这里做错了什么?我怎样去on_delete上班?这是使用 Python 3.6 和 Peewee 3.0.2 的最小可重现示例。
import peewee
db_proxy = …Run Code Online (Sandbox Code Playgroud) 假设我有两个文件,foo.py并且bar.py. 它们位于何处并不重要,只要以foo.py某种方式设法导入并调用后者中定义的bar.py函数即可。func()我如何获得foo.pyfrom的绝对路径bar.func()?
是否可以在Tkinter中制作一个不可点击且不可编辑的文本小部件?
python之间的区别是什么?
value = getValue()
Run Code Online (Sandbox Code Playgroud)
和
value = getValue
Run Code Online (Sandbox Code Playgroud)
?
我能做到这一点的唯一方法是:
var1 = list[0]
var2 = list[1]
var3 = list[2]
var4 = list[3]
...
Run Code Online (Sandbox Code Playgroud)
有更简单的方法吗?
我正在研究一个突破性的克隆,我一直试图弄清楚如何获得两个碰撞反射的交叉矩形因此我可以测量球在x和y轴上进入块的深度,并决定哪个部分是速度我会逆转.
我想我可以像这样计算每个案例的深度:

但是,如果我有交叉矩形而不是我不必担心如果球从左/右或顶部/底部撞击块(因为我将只分别反转x和y轴),因此节省了我很多打字.
我看过Pygame的文档,但似乎它没有这个功能.我该如何解决这个问题?