这是一个神秘的python问题:
我正在开发一个python包,偶尔会报告导入错误ImportError: cannot import name ….一般不能导入的模块
通过这个简单的例子,我能够重现类似的效果:
mypkg/__init__.py:
from . import module_a
yarg ## cause import error
Run Code Online (Sandbox Code Playgroud)
mypkg/module_a.py:
print "imported module_a"
Run Code Online (Sandbox Code Playgroud)
现在我将尝试两次导入包.请注意,第二次导入时错误发生了变化:
>>> import mypkg
Module A imported
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "mypkg/__init__.py", line 2, in <module>
yarg
NameError: name 'yarg' is not defined
>>> import mypkg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "mypkg/__init__.py", line 1, in <module>
from . …Run Code Online (Sandbox Code Playgroud) 安装easy_install并尝试使用它然后安装python包后,它就失败了.
[root@server]# easy_install-2.7 pip
Searching for pip
Reading http://pypi.python.org/simple/pip/
Download error on http://pypi.python.org/simple/pip/: unknown url type: https -- Some packages may not be found!
Run Code Online (Sandbox Code Playgroud)
我似乎得到了一个重定向
curl -IL http://pypi.python.org/simple/pip/
HTTP/1.1 301 Moved Permanently
Retry-After: 0
Location: https://pypi.python.org/simple/pip/
Content-Length: 0
Accept-Ranges: bytes
Date: Tue, 12 Nov 2013 10:28:40 GMT
Age: 0
Connection: close
HTTP/1.1 200 OK
Date: Tue, 12 Nov 2013 10:28:40 GMT
Content-Type: text/html; charset=utf-8
X-PYPI-LAST-SERIAL: 835141
Cache-Control: max-age=86400, public
Strict-Transport-Security: max-age=31536000
Content-Length: 3933
Accept-Ranges: bytes
Age: 78434
Vary: Accept-Encoding
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 …
我想使用Python 2.6的子进程版本,因为它允许Popen.terminate()函数,但我坚持使用Python 2.5.在我的2.5代码中使用较新版本的模块是否有一些相当干净的方法?某种from __future__ import subprocess_module?
我在使用Python调用shell命令时读取了我在StackOverflow上找到的每个线程subprocess,但我找不到适用于我的情况的答案:
我想从Python中执行以下操作:
运行shell命令command_1.收集变量中的输出result_1
Shell管道 result_1进入command_2并收集输出result_2.换句话说,command_1 | command_2 使用我在之前的步骤中运行时获得的结果运行command_1
将相同的管道result_1输入第三个命令command_3并收集结果result_3.
到目前为止,我尝试过:
p = subprocess.Popen(command_1, stdout=subprocess.PIPE, shell=True)
result_1 = p.stdout.read();
p = subprocess.Popen("echo " + result_1 + ' | ' +
command_2, stdout=subprocess.PIPE, shell=True)
result_2 = p.stdout.read();
Run Code Online (Sandbox Code Playgroud)
原因似乎是"echo " + result_1 不能模拟获得管道命令输出的过程.
这是否可以使用子进程?如果是这样,怎么样?
例如我正在使用ffplay并希望运行此命令-bufsize[:stream_specifier] integer (output,audio,video)
目前我有这个:
subprocess.call(["ffplay", "-vn", "-nodisp","-bufsize 4096", "%s" % url])
Run Code Online (Sandbox Code Playgroud)
但这说它无效.
我很惭愧地问这样一个问题,但我已经尝试了几个小时......似乎我不能让我的python版本做随机的事情了.更确切地说,它缺少模块urandom.
首先,这里有一些关于我的系统的信息:
which python: /opt/local/bin/pythonimport os; os: <module 'os' from '/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>echo $PATH: /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin$ENV并且$PYTHONPATH是空的现在,当我有更深入的了解时vim /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/random.py,我可以看到这个文件需要urandom:
line 47: from os import urandom as _urandom
Run Code Online (Sandbox Code Playgroud)
所以,从逻辑上讲,我尝试运行时失败了:
>>> import random
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/random.py", line 47, in <module>
from os import urandom as _urandom
ImportError: cannot import name urandom
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?urandom应该居住在哪里?到目前为止,我一直在谷歌搜索没有成功.
似乎很多Ubuntu用户都使用virtualenv这个问题,但我没有使用virtualenv,而且我没有使用Ubuntu.我敢打赌,我的PATH或PYTHONPATH或ENV变量设置不正确,但我不知道如何解决这个问题.
我想在我的ubuntu机器(corgy工具)上运行用python编写的第三部分工具.
但是我不知道如何在Python路径中添加其他模块.
cat doc/download.rst
There is currently no setup.py, so you need to manually add
the download directory to your PYTHON_PATH environment variable.
Run Code Online (Sandbox Code Playgroud)
如何将目录添加到PYTHON_PATH?
我试过了:
export PYTHON_PATH=/home/user/directory:$PYTHON_PATH && source .bashrc
export PATH=/home/user/directory:$PATH && source .bashrc
python
import sys
sys.path.append("/home/user/directory/")
但是,当我尝试运行此工具时,我得到:
Traceback (most recent call last):
File "examples/dotbracket_to_bulge_graph.py", line 4, in <module>
import corgy.graph.bulge_graph as cgb
ImportError: No module named corgy.graph.bulge_graph
Run Code Online (Sandbox Code Playgroud) 我去了这个页面并下载了tar文件: http://pypi.python.org/pypi/lxml/2.3.4#downloads
然后我将lxml文件夹复制到我的Python26/Lib文件夹中.现在,当我去解释器并键入from lxml import etree我得到错误:cannot import etree.有人知道出了什么问题吗?我正在运行Windows.
我有以下pandas数据帧.为简单起见,我们假设它只有两列:id和search_term
id search_term
37651 inline switch
Run Code Online (Sandbox Code Playgroud)
我做:
train['search_term'] = train['search_term'].str.replace("in."," in. ")
Run Code Online (Sandbox Code Playgroud)
期望上面的数据集不受影响,但我得到了这个数据集的回报:
id search_term
37651 in. in. switch
Run Code Online (Sandbox Code Playgroud)
这意味着inl被替换为in.,ine并被替换为in.,好像我使用正则表达式,其中dot表示任何字符.
如何重新设置第一个命令,以便字面上in.替换为in.任何in未跟随点的任何一个命令,如下所示:
a = 'inline switch'
a = a.replace('in.','in. ')
a
>>> 'inline switch'
Run Code Online (Sandbox Code Playgroud) 我正在处理一些大的 txt 文件(有些大约 3 GB),每当我必须检查 txt 文件时,消息“文件大小超出配置的限制(2.56 MB),代码洞察功能不可用”出现在顶部文件中,我尝试通过转到Help->Edit自定义属性然后在打开的文件中添加下一行代码来更改文件大小
idea.max.content.load.filesize=500000
Run Code Online (Sandbox Code Playgroud)
问题是,即使关闭并重新打开 PyCharm 后也会出现相同的消息,我需要做其他事情吗?只需编写该行代码就足以更改文件大小?,它不需要像普通代码一样运行?如果是这样,由于没有出现该选项,我该如何运行它?
python ×9
importerror ×3
subprocess ×3
easy-install ×1
file ×1
html-parsing ×1
lxml ×1
pandas ×1
pip ×1
pipe ×1
pycharm ×1
python-2.5 ×1
python-2.7 ×1
regex ×1
replace ×1
shell ×1
size ×1
string ×1
ubuntu ×1