我想获取Python对象所来自的模块.都
x.__module__
Run Code Online (Sandbox Code Playgroud)
和
x.__class__.__module__
Run Code Online (Sandbox Code Playgroud)
似乎工作.这些完全是多余的吗?是否有理由偏爱另一个?
module name: module references __file__
当我使用easy_install安装我自己的软件包并且初始谷歌搜索没有带来任何成功时,这会出现几次.
我完全知道我__file__在模块内部使用,但它没有任何问题.
如何在不删除__file__引用的情况下删除此消息?
经过几个小时的调试和反复试验,我发现导入两个独立的Python模块导致其中一个函数停止工作.
import arcpy
# works
sde_conn = arcpy.ArcSDESQLExecute(r"C:\temp\test.sde")
Run Code Online (Sandbox Code Playgroud)
然而:
import arcpy
import rtree
# fails
sde_conn = arcpy.ArcSDESQLExecute(r"C:\temp\test.sde")
Run Code Online (Sandbox Code Playgroud)
这两个Python模块是rtree和ESRI的arcpy,我在Windows上运行这两个模块(问题出现在Windows 7和Windows Server 2008 R2以及32位和64位Python安装上).
我记录了这个问题,但是我想知道一个模块在另一个模块中破坏功能的可能原因是什么?
我快速检查了全局变量,并修改了系统路径.两者都依赖于DLL.
还有哪些其他因素可以解决?
我想使用cx_freeze编译带有子模块的Python 3.3模块.
所以,我的dir结构是:
projectname/
__init__.py
submodule1/
__init__.py
bootstrap.py
script1.py
submodule11/
script2.py
submodule2/
...
Run Code Online (Sandbox Code Playgroud)
在__init__.py我导入
from submodule1 import bootstrap
Run Code Online (Sandbox Code Playgroud)
并从引导程序
import submodule1.submodule11.script2
Run Code Online (Sandbox Code Playgroud)
如果我运行init文件,一切都很好,并且正确执行带有子模块导入的脚本.
当我编译它时,我使用这个setup.py:
from cx_Freeze import setup,Executable
import sys
includes = []
excludes = ['Tkinter']
packages = ['submodule1', 'submodule2']
base = "Win32GUI"
setup(
name = 'myapp',version = '0.1',description = 'app',author = 'user',
options = {'build_exe': {'excludes':excludes,'packages':packages}},
executables = [Executable('__init__.py',base=base)]
)
Run Code Online (Sandbox Code Playgroud)
并在'projectname'目录中运行脚本.
但是,如果我启动应用程序,我会ImportError: no module named 'submodule1.submodule11'从错误对话框中获取.
这是真的:在library.zip中,这个子模块不存在.
我做错了什么?
我有以下包结构
package
__init__.py
sub1
__init__.py
foo.py # Contains class Foo
sub2
__init__.py
bar.py # Contains class Bar
Run Code Online (Sandbox Code Playgroud)
我希望能够公正import package和有package.Foo和package.Bar,即我想有子包是对用户透明.
问题是导入sub2需要很长时间,许多用户根本不关心sub2中的东西,只想要sub1中的东西.因此,我希望用户能说import package.sub1或from package import sub1到刚刚导入SUB1和SUB2跳跃的进口.
我知道我可以通过package/__init__.py控制来实现第一部分
from .sub1 import *
from .sub2 import *
Run Code Online (Sandbox Code Playgroud)
和具有package/sub1/__init__.py可from .foo import Foo与类似地对于SUB2.但是,即使用户仅尝试导入,也会始终导入sub1和sub2 package.sub1.
相应地,我可以通过package/__init__.py使用与sub1/__init__.py上面相同的空来实现第二部分.但是,然后只是说不import package加载sub1或sub2,所以用户必须显式加载它们然后引用package.sub1.Foo.
理想情况下,解决方案在2.7.10和3.5.0中均可使用,但如果两者都不可能,我将接受其中一个或另一个.
我正在尝试在我的PC和PIC18F4550之间进行通信,但是程序没有检测到它,而计算机正在设备管理器中显示它.
import usb.core
dev = usb.core.find(idVendor = 0x04D8, idProduct = 0xFEAA)
Run Code Online (Sandbox Code Playgroud)
检查USB设备的功能:
def find(find_all = False, backend = None, custom_match = None, **args):
def device_iter(k, v):
for dev in backend.enumerate_devices():
d = Device(dev, backend)
if _interop._reduce(lambda a, b: a and b,map(operator.eq,v,map(lambda i:getattr(d,i),k)),True)and (custom_match is None or custom_match(d)):
yield d
if backend is None:
import usb.backend.libusb1 as libusb1
import usb.backend.libusb0 as libusb0
import usb.backend.openusb as openusb
for m in (libusb1, openusb, libusb0):
backend = m.get_backend()
if backend is not …Run Code Online (Sandbox Code Playgroud) 假设我们有以下内容mod.py:
def __enter__():
print("__enter__<")
def __exit__(*exc):
print("__exit__< {0}".format(exc))
class cls:
def __enter__(self):
print("cls.__enter__<")
def __exit__(self, *exc):
print("cls.__exit__< {0}".format(exc))
Run Code Online (Sandbox Code Playgroud)
以及它的以下用途:
import mod
with mod:
pass
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
Traceback (most recent call last):
File "./test.py", line 3, in <module>
with mod:
AttributeError: __exit__
Run Code Online (Sandbox Code Playgroud)
根据文档文档,该with语句应如下执行(我相信它在步骤2失败,因此截断列表):
- 评估上下文表达式(with_item中给出的表达式)以获取上下文管理器.
__exit__()加载上下文管理器以供以后使用.__enter__()调用上下文管理器的方法.- 等等...
据我所知,没有理由找不到原因__exit__.是否有一些我错过了使模块无法作为上下文管理器工作的东西?
python python-module with-statement contextmanager python-3.x
我使用的是Python 3.6.我试图运行OpenCV光流代码:https: //github.com/opencv/opencv/blob/master/samples/python/opt_flow.py
并且有一个错误:
ModuleNotFoundError: No module named 'video'
Run Code Online (Sandbox Code Playgroud)
我认为必须缺少"视频"模块.所以,我跑了
pip install video
Run Code Online (Sandbox Code Playgroud)
在命令行中,但它给了我这个错误:
Collecting video
Could not find a version that satisfies the requirement video (from versions: )
No matching distribution found for video
Run Code Online (Sandbox Code Playgroud)
谁能建议如何解决这个问题?如何找到本地驱动器中安装的OpenCV模块的位置?
我有Windows 7 64位和Python 3.6
我实际上是在挖掘整个网络来解决这个问题 - 而且没有什么可悲的.
AttributeError Traceback (most recent call last)
<ipython-input-150-80ee8bd5f0f2> in <module>()
----> serial.Serial()
AttributeError: module 'serial' has no attribute 'Serial'
Run Code Online (Sandbox Code Playgroud)
我尝试通过以下方式解决这个问题: - 检查我的文件是否名为serial.py - 重新安装模块 - 首先,整个模块不起作用,现在只有它的功能. - 我不能使用它的任何功能,检查端口不起作用,没有什么工作. - 我检查了我的点 - 一切都很好,模块在文件夹site-pacages. - 如果我在pySerial文件中执行一些代码 - 它可以工作.但是没有serial.Serial或连接COM端口(我尝试这样做.)
我刚刚升级到python 3.7,我意识到我所有的模块都停留在以前的版本中。甚至Django也不再被认可。如何将所有内容转移到新版本?我现在有点迷茫,甚至不知道新版本的安装位置。
编辑:
当我执行$ which python3.6此操作时,终端会告诉我它不存在,但是我在中有一个python3.6目录/usr/local/lib/,其中安装了所有模块。
在同一目录中,/usr/local/lib/我还有一个python3.7目录,其中安装了一些模块,但缺少许多模块。但是,当我python3.7在查找器中搜索文件时,它不会出现。当我这样做时$ which python3.7,路径/usr/local/bin与目录不一样。
任何人都可以看到发生了什么,知道如何将所有模块转移到python3.7吗?
python ×10
python-module ×10
packages ×2
compilation ×1
cx-freeze ×1
executable ×1
libusb ×1
module ×1
opencv ×1
package ×1
pip ×1
pyserial ×1
python-2.7 ×1
python-3.x ×1
pyusb ×1
updates ×1