标签: python-import

可以将实例命名为与模块相同的名称吗?

我经常发现用小写字母命名包含类定义和该类实例的模块,并使用驼峰式命名作为类名是“自然的”。例如,我想这样做:

In [2]: from publisher import Publisher

In [3]: publisher = Publisher()
Run Code Online (Sandbox Code Playgroud)

这里我有一个名为 的模块publisher,还有一个以Publisher相同方式调用的实例。模块和实例似乎都按预期“工作”:

In [4]: from publisher import RandomData

In [5]: publisher.random.uuid()
Out[5]: 'c490508d-2071-536e-2f38-4b03b04351e1'
Run Code Online (Sandbox Code Playgroud)

我从模块导入了另一个类并调用了实例方法。Python 是否“从上下文中理解”我指的是模块还是实例?以这种方式重复使用名称可以吗?

python namespaces python-import

1
推荐指数
1
解决办法
366
查看次数

如何从同一目录中的模块导入?

我正在尝试制作 Python3.6 包,但从包内导入时遇到了 ModuleNotFound 错误。该包具有以下结构:

project/
    project/
        cache/
            default.py
            interface.py
        __init__.py
        handler.py
test.py
Run Code Online (Sandbox Code Playgroud)

__init__.py文件包含以下内容:

from .handler import Handler

def getHandler(access_token=None, **kwargs):
    return Handler(access_token, **kwargs)
Run Code Online (Sandbox Code Playgroud)

然后在 中handler.py,我尝试使用cache以下内容导入:

from .cache.default import DefaultCache
Run Code Online (Sandbox Code Playgroud)

目标是允许客户端代码执行以下操作:

import project

handler = project.getHandler()
Run Code Online (Sandbox Code Playgroud)

最后的导入失败了,我不清楚为什么。有任何想法吗?TIA。

不确定它有多相关,但我正在通过在外部project目录中运行以下命令来测试它:

> pip install .
> python3 ../test.py
Run Code Online (Sandbox Code Playgroud)

这将返回以下回溯 (venv) Jamess-MacBook-Pro-2:project james$ python3 ../test.py Traceback (most recent call last): File "../test.py", line 1, in <module> import project File "/Users/james/Work/Project/project/venv/lib/python3.6/site-packages/project/__init__.py", line 1, in <module> from .handler …

python python-import python-3.x

1
推荐指数
1
解决办法
3011
查看次数

如何静默模块的日志记录?

概述

我想用作httpimport多个脚本通用的日志库。该模块会生成自己的日志,我不知道如何使其静音。

在其他情况下,比如这个,我会使用

logging.getLogger('httpimport').setLevel(logging.ERROR)
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

细节

以下代码是上面提到的“通用日志记录代码”的存根:

# toconsole.py

import logging
import os

log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s %(message)s')
handler_console = logging.StreamHandler()
level = logging.DEBUG if 'DEV' in os.environ else logging.INFO
handler_console.setLevel(level)
handler_console.setFormatter(formatter)
log.addHandler(handler_console)

# disable httpimport logging except for errors+
logging.getLogger('httpimport').setLevel(logging.ERROR)
Run Code Online (Sandbox Code Playgroud)

一个简单的用法,例如

import httpimport

httpimport.INSECURE = True
with httpimport.remote_repo(['githublogging'], 'http://localhost:8000/') :
    from toconsole import log

log.info('yay!')
Run Code Online (Sandbox Code Playgroud)

给出以下输出

[!] Using non HTTPS URLs ('http://localhost:8000//') can be a security hazard!
2019-08-25 13:56:48,671 yay!
yay!
Run Code Online (Sandbox Code Playgroud)

第二个(裸)yay!必须来自 …

python logging python-import python-3.x

1
推荐指数
1
解决办法
3334
查看次数

ImportError:DLL 加载失败:找不到指定的模块 - PyCharm

所以这周我一直在尝试切换到 PyCharm,但使用我的一些旧代码并没有成功。我使用 anaconda 基本环境作为解释器,以下代码

import openpyxl
import numpy as np
Run Code Online (Sandbox Code Playgroud)

然后是一些有关打开工作表并使用行和列创建数组的基本代码。AFAIK 这是一个与缺少 DLL 相关的导入问题,但仅此而已。这是错误:

Traceback (most recent call last):

File "C:\Users\nikol\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2961, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)

File "<ipython-input-2-a51a1395fac2>", line 1, in <module>
    runfile('C:/Users/nikol/Desktop/APO A1P2/Code/make_excel.py', wdir='C:/Users/nikol/Desktop/APO A1P2/Code')

File "C:\Program Files\JetBrains\PyCharm 2019.2.3\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script

File "C:\Program Files\JetBrains\PyCharm 2019.2.3\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)

  File "C:/Users/nikol/Desktop/APO A1P2/Code/make_excel.py", line 2, in <module>
    import numpy as np

  File "C:\Program Files\JetBrains\PyCharm …
Run Code Online (Sandbox Code Playgroud)

python dll dllimport python-import importerror

1
推荐指数
1
解决办法
2775
查看次数

mlflow:pip 安装问题

我阅读了许多有关使用 pip 安装问题的线程。但是,我可以找到解决方案来帮助我解决问题。我安装了 mlflow:

    pip3 install mlflow
Run Code Online (Sandbox Code Playgroud)

所以mlflow安装在/usr/local/bin/mlflow中

由于它不在 /Users/xxxx/opt/anaconda3/lib/python3.7/site-packages 中,因此当我尝试运行导入 mlflow 模块的代码时,出现“ModuleNotFoundError: No module named 'mlflow' 错误。我应该如何处理解决这个问题?

pip python-import importerror python-3.7 mlflow

1
推荐指数
1
解决办法
2万
查看次数

模块导入自身时出现属性错误 - 在某些计算机上有效

我继承了一些我正在尝试运行的 python 脚本。其中包括一些自定义模块,在导入其中一个模块时出现错误,这似乎是由于其中一个模块导入自身所致。我觉得奇怪的是它在一台计算机上可以运行,但在另一台计算机上却不能。

目录结构如下:

/path/to/packages/python_packages/x
                              |
/path/to/packages/python_packages/x/mod1.py
/path/to/packages/python_packages/x/mod2.py
/path/to/packages/python_packages/x/mod3.py
Run Code Online (Sandbox Code Playgroud)

我添加(并使用 print(sys.path) 交叉检查)路径,如下所示:

sys.path.append("/path/to/packages/python_packages/")
Run Code Online (Sandbox Code Playgroud)

然后我这样做:

import x.mod1 as mod1
import x.mod2 as mod2
import x.mod3 as mod3
Run Code Online (Sandbox Code Playgroud)

导入 mod1 有效。

导入 mod2 不起作用:

AttributeError: module 'x' has no attribute mod2
Run Code Online (Sandbox Code Playgroud)

Traceback 抱怨 mod2.py 中出现的这一行:

import x.mod2 as mod2
Run Code Online (Sandbox Code Playgroud)

导入 mod3 不起作用,因为它需要导入 mod2,其操作方式与上面相同。

在 ipython 的回溯中,我可以看到它找到了正确的 python 文件,因为它打印出了文件中的代码及其名称、完整路径。

我尝试删除所有init .py 和pycache

我尝试在另一台计算机上运行它,在那里我可以毫无问题地导入模块。

在有问题的计算机上,我有Python 3.6.8,在CentOS7(3.10.0-1160.21.1.el7.x86_64)上运行,在它工作的计算机上,我有Python 3.9.2,在Manjaro(5.4)上运行.108-1-曼贾罗)。

我在出现问题的计算机上没有 root 访问权限。

完整的回溯如下(我更改了路径和文件名以与上面的解释一致):

In [9]: import x.mod2 as mod2
Run Code Online (Sandbox Code Playgroud)
AttributeError                            Traceback (most recent …
Run Code Online (Sandbox Code Playgroud)

python python-module python-import

1
推荐指数
1
解决办法
408
查看次数

UNIX/Python - 如何在没有互联网和 pip 的情况下使用 cx_Oracle

我的公司(还)不允许我们安装或升级 python3,也不允许我们在其服务器上安装 pip 模块。即使可以,机器也没有连接到互联网。但我们可以执行 python2 二进制文件

目标

cx_Oracle无需使用pip互联网即可使用该模块

暂定解决方法

我想到在我的计算机上安装 cx_Oracle 包,然后将安装的模块文件从我的计算机复制到服务器。

所以服务器 dev 文件夹看起来像这样(只列出有趣的目录和文件,省略__pychache__*.pyc其他无用的*.py文件):

|-- test_cx_oracle_in_local.py
\-- sqlalchemy/
    |-- connectors
    |-- databases
    |-- dialects
    |   |-- firebird
    |   |-- mysql
    |   |-- mssql
    |   |-- oracle
    |   |   |-- base.py
    |   |   |-- cx_oracle.py   <--- This is the interesting file
    |   |   |-- __init__.py
    |   |   \-- zxjdbc.py
    |   |-- postgresql
    |   |-- sqlite
    |   |-- sybase
    |-- engine
    |-- …
Run Code Online (Sandbox Code Playgroud)

python oracle cx-oracle python-import

1
推荐指数
1
解决办法
1675
查看次数

如何动态导入类似于Python中“import X from Y”语法的模块?

我正在努力实现:

from X import Y
Run Code Online (Sandbox Code Playgroud)

其中 Y 是仅在运行时才知道的模块的字符串名称。

我尝试过使用

module = importlib.import_module(Y, X)
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。我也不知道模块的路径,因为它仅在运行时存在于模块 Brownie 中,然后被删除。

非常感谢帮助。

python python-import brownie

1
推荐指数
1
解决办法
3178
查看次数

python导入相关模块

我在同一目录中有Python模块a.py和b.py. 如果a.py可能已从其他目录导入或直接执行,我如何可靠地从a.py导入b.py?此模块将分发,因此我无法对单个路径进行硬编码.

我一直在玩__file__,sys.path和os.chdir,但感觉很乱.而且__file__并不总是可用的.

谢谢

python python-module relative-path python-import

0
推荐指数
1
解决办法
689
查看次数

ImportError:没有名为numeric的模块

我得到以下错误ImportError:如果我有以下导入,则没有名为numeric的模块

 from numeric import *
Run Code Online (Sandbox Code Playgroud)

在我的python源代码中.如何在我的Windows机器上运行python 2.7.x编译器?

python python-import importerror

0
推荐指数
1
解决办法
2万
查看次数