我想从同一目录中的另一个文件导入一个函数.
有时它适用于我,from .mymodule import myfunction
但有时我会得到:
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)
有时它适用from mymodule import myfunction
,但有时我也得到:
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)
我不明白这里的逻辑,我找不到任何解释.这看起来完全随机.
有人可以向我解释这一切背后的逻辑是什么吗?
我有以下目录:
mydirectory
??? __init__.py
??? file1.py
??? file2.py
Run Code Online (Sandbox Code Playgroud)
我有一个在file1.py中定义的函数f.
如果,在file2.py中,我这样做
from .file1 import f
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
SystemError:父模块''未加载,无法执行相对导入
为什么?以及如何使它工作?
我想使用mysql-connector
python 3 的库.我可以使用pymysql
,但mysql-connector
已经有一个连接池实现,而pymysql
似乎没有.所以这对我来说写的代码就少了.
但是,当我这样做的时候
$ pip3 search mysql-connector
Run Code Online (Sandbox Code Playgroud)
我发现这3个库可用:
mysql-connector-repackaged - MySQL driver written in Python
mysql-connector-python-rf - MySQL driver written in Python
mysql-connector-python - MySQL driver written in Python
Run Code Online (Sandbox Code Playgroud)
这非常令人困惑.谁知道我应该使用哪一个?为什么?
谢谢你的帮助.
我试着学习一点Clojure,因为语言很好看.但似乎没有关于如何安装/使用库的信息,例如clojure.math.numeric-tower.
现在我通过在我的Linux shell中键入它来运行REPL:
java -cp ~/Clojure/clojure-1.3.0/clojure-1.3.0.jar clojure.main
Run Code Online (Sandbox Code Playgroud)
我下载了数字塔罐,并把它放在任何地方.我已经以各种可能的方式修改了-cp选项.我把numeric_tower.clj文件放在任何地方.它仍然无法正常工作.
使用这些库的方法是什么?
尽管通读文件,我比较困惑的含义&
和*
象征拉斯特,以及更普遍的关于什么是防锈参考准确.
在这个例子中,它似乎类似于C++引用(即,使用时自动解除引用的地址):
fn main() {
let c: i32 = 5;
let rc = &c;
let next = rc + 1;
println!("{}", next); // 6
}
Run Code Online (Sandbox Code Playgroud)
但是,以下代码的工作方式完全相同:
fn main() {
let c: i32 = 5;
let rc = &c;
let next = *rc + 1;
println!("{}", next); // 6
}
Run Code Online (Sandbox Code Playgroud)
*
在C++中使用取消引用引用是不正确的.所以我想了解为什么在Rust中这是正确的.
到目前为止,我的理解是,*
在Rust引用前插入取消引用它,但是*
无论如何都是隐式插入的,所以你不需要添加它(在C++中,它是隐式插入的,如果你插入它,你会得到一个编译错误).
但是,这样的东西不能编译:
fn main() {
let mut c: i32 = 5;
let mut next: i32 = 0;
{
let rc = …
Run Code Online (Sandbox Code Playgroud) 我有一些使用交互式加载python模块的函数 __import__
我最近偶然发现了一篇关于Python中"导入锁定"的文章,即专门针对导入的锁(不仅仅是GIL).但文章很旧,所以也许这不再是真的了.
这让我想知道在线程中导入的做法.
import
/ __import__
线程安全的?编辑2012年9月12日
感谢Soravux的出色回复.因此导入是线程安全的,我不担心死锁,因为__import__
我的代码中使用的函数不会相互调用.
您是否知道即使已经导入模块也会获得锁定?如果是这种情况,我应该查看sys.modules,以便在调用之前检查模块是否已经导入__import__
.
当然,这不应该在CPython中产生很大的不同,因为无论如何都有GIL.但是它可能会在其他实现上产生很大的不同,比如Jython或stackless python.
编辑2012年9月19日
关于Jython,这是他们在文档中所说的:
http://www.jython.org/jythonbook/en/1.0/Concurrency.html#module-import-lock
但是,Python确实定义了一个模块导入锁,它由Jython实现.只要输入任何名称,就会获得此锁定.无论导入是通过import语句,等效
__import__
内置函数还是相关代码,都是如此.重要的是要注意,即使已导入相应的模块,仍将获取模块导入锁定(如果只是短暂的).
因此,在进行导入之前检查sys.modules似乎是有意义的,以避免获取锁定.你怎么看?
在Git中删除所有已删除文件的命令是什么?
我知道有一个命令要通过名称来取消文件(git rm myfile
)
但是我想要删除所有已删除的文件,而不关心它们的命名方式.
我正在尝试压缩包含4个大文件的文件夹的内容,非常非常相似.所以我希望减小尺寸.
这是我在linux/fedora上使用的命令:
zip -9 myarchive.zip -r myfolder -P mypassword
Run Code Online (Sandbox Code Playgroud)
我收到了回复:
adding: myfolder/ (stored 0%)
adding: myfolder/Program1.exe (deflated 0%)
adding: myfolder/Program2.exe (deflated 0%)
adding: myfolder/Program3.exe (deflated 0%)
adding: myfolder/Program4.exe (deflated 0%)
Run Code Online (Sandbox Code Playgroud)
然后我得到了存档,这与我的原始文件夹大小相同.
似乎根本没有发生压缩.为什么?
据我所知MySQLdb仍然没有移植到Python 3.
在pypy上似乎有另一个名为PyMySQL的库但是python 3的安装看起来很奇怪(运行.sh脚本?).还有一个名为PyMySQL3的库,但我无法找到有关它的信息.
如今,在Python 3中使用MySQL的首选方法是什么?
是否有一个优雅的解决方案,可以使用pip或python setup.py install
命令安装?
我正在尝试在 sqlite 中实现与“ON UPDATE CURRENT_TIMESTAMP”MySQL 功能等效的功能。我的想法是使用这样的触发器:
CREATE TRIGGER last_update_trigger
AFTER UPDATE
ON mytable
FOR EACH ROW
BEGIN
UPDATE mytable SET last_update = CURRENT_TIMESTAMP WHERE id = old.id;
END
Run Code Online (Sandbox Code Playgroud)
但这有一个问题。每次该表的记录发生更新时,触发器都会触发同一记录的新更新。这应该会一次又一次地触发触发器,从而导致更新的无限循环。
这真的会发生吗?我的触发器中的更新会再次触发触发器吗?我可以避免触发触发器内的触发器吗?
python ×5
python-3.x ×3
mysql ×2
ampersand ×1
clojure ×1
command ×1
compression ×1
concurrency ×1
dereference ×1
git ×1
import ×1
linux ×1
locking ×1
math ×1
module ×1
pip ×1
reference ×1
rust ×1
sql-update ×1
sqlite ×1
timestamp ×1
triggers ×1
unix ×1
zip ×1