如何在完整路径下加载Python模块?请注意,该文件可以位于文件系统中的任何位置,因为它是一个配置选项.
想象一下这个目录结构:
app/
__init__.py
sub1/
__init__.py
mod1.py
sub2/
__init__.py
mod2.py
Run Code Online (Sandbox Code Playgroud)
我正在编码mod1,我需要从中导入一些东西mod2.我该怎么办?
我尝试了from ..sub2 import mod2但是我得到了"尝试非包装中的相对导入".
我google了一下,但发现只有" sys.path操纵"黑客.有没有干净的方式?
编辑:我__init__.py的所有人目前都是空的
EDIT2:我想这样做,因为SUB2包含了为子包(共享类sub1,subX等等).
Edit3:我正在寻找的行为与PEP 366中描述的相同(感谢John B)
我在Ubuntu上使用eSpeak并且有一个Python 2.7脚本可以打印并说出一条消息:
import subprocess
text = 'Hello World.'
print text
subprocess.call(['espeak', text])
Run Code Online (Sandbox Code Playgroud)
eSpeak会产生所需的声音,但是外壳会出现一些错误(ALSA lib ...,没有套接字连接),因此我无法轻易读取之前打印的内容.退出代码为0.
不幸的是,没有任何记录的选项可以关闭它的详细程度,所以我正在寻找一种只能在视觉上使其静音并保持打开的外壳清洁以进行进一步交互的方法.
我怎样才能做到这一点?
我用subprocess模块调用不同的进程.但是,我有一个问题.
在以下代码中:
callProcess = subprocess.Popen(['ls', '-l'], shell=True)
Run Code Online (Sandbox Code Playgroud)
和
callProcess = subprocess.Popen(['ls', '-l']) # without shell
Run Code Online (Sandbox Code Playgroud)
两者都有效.阅读文档后,我开始知道这shell=True意味着通过shell执行代码.这意味着在缺席的情况下,该过程将直接启动.
那么我应该更喜欢我的情况 - 我需要运行一个进程并获得其输出.从shell内部或外部调用它有什么好处.
我想在其中一列上使用正则表达式干净地过滤数据帧.
对于一个人为的例子:
In [210]: foo = pd.DataFrame({'a' : [1,2,3,4], 'b' : ['hi', 'foo', 'fat', 'cat']})
In [211]: foo
Out[211]:
a b
0 1 hi
1 2 foo
2 3 fat
3 4 cat
Run Code Online (Sandbox Code Playgroud)
我想将行过滤为f使用正则表达式开头的行.先去:
In [213]: foo.b.str.match('f.*')
Out[213]:
0 []
1 ()
2 ()
3 []
Run Code Online (Sandbox Code Playgroud)
这不是太有用了.但是这会得到我的布尔索引:
In [226]: foo.b.str.match('(f.*)').str.len() > 0
Out[226]:
0 False
1 True
2 True
3 False
Name: b
Run Code Online (Sandbox Code Playgroud)
所以我可以通过以下方式来限制:
In [229]: foo[foo.b.str.match('(f.*)').str.len() > 0]
Out[229]:
a b
1 2 foo
2 3 fat …Run Code Online (Sandbox Code Playgroud) Python将以下内容识别为定义文件编码的指令:
# -*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)
我确实在(-*- var: value -*-)之前看过这种指令.它从何而来?什么是完整的规范,例如,值可以包括空格,特殊符号,换行符,甚至-*-本身?
我的程序将编写纯文本文件,我想使用这种格式在其中包含一些元数据.
在运行python脚本时,我遇到了这个错误
from lxml import etree
ImportError: No module named lxml
Run Code Online (Sandbox Code Playgroud)
现在我尝试安装lxml
sudo easy_install lmxl
Run Code Online (Sandbox Code Playgroud)
但它给了我以下错误
Building lxml version 2.3.beta1.
NOTE: Trying to build without Cython, pre-generated 'src/lxml/lxml.etree.c' needs to be available.
ERROR: /bin/sh: xslt-config: not found
** make sure the development packages of libxml2 and libxslt are installed **
Run Code Online (Sandbox Code Playgroud)
使用libxslt的构建配置
src/lxml/lxml.etree.c:4: fatal error: Python.h: No such file or directory
compilation terminated.
error: Setup script exited with error: command 'gcc' failed with exit status 1
Run Code Online (Sandbox Code Playgroud) 在容器内运行服务时,让我们说命令是mongodb
docker run -d myimage
Run Code Online (Sandbox Code Playgroud)
将立即退出,并返回容器ID.在我的CI脚本中,我在运行mongo容器后立即运行客户端来测试mongodb连接.问题是:客户端无法连接,因为服务尚未启动.除了sleep 10在我的脚本中添加一个大的,我没有看到任何等待容器启动和运行的选项.
Docker有一个wait在这种情况下不起作用的命令,因为容器不存在.这是码头工人的限制吗?谢谢
我想从像一些shell命令得到的输出ls或者df在Python脚本.我看到它commands.getoutput('ls')已被弃用,但subprocess.call('ls')只会给我返回代码.
我希望有一些简单的解决方案.
当没有给出参数时,我的脚本应该启动演示模式.我试过这个:
args = parser.parse_args()
if len(args) == 0:
run_demo()
else:
# evaluate args
Run Code Online (Sandbox Code Playgroud)
这给*** TypeError: object of type 'Namespace' has no len()作为args是没有列表.
我怎样才能达到我想要的目标?