我经常发现用小写字母命名包含类定义和该类实例的模块,并使用驼峰式命名作为类名是“自然的”。例如,我想这样做:
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 是否“从上下文中理解”我指的是模块还是实例?以这种方式重复使用名称可以吗?
我正在尝试制作 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 …
我想用作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!必须来自 …
所以这周我一直在尝试切换到 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) 我阅读了许多有关使用 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' 错误。我应该如何处理解决这个问题?
我继承了一些我正在尝试运行的 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) 我的公司(还)不允许我们安装或升级 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) 我正在努力实现:
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模块a.py和b.py. 如果a.py可能已从其他目录导入或直接执行,我如何可靠地从a.py导入b.py?此模块将分发,因此我无法对单个路径进行硬编码.
我一直在玩__file__,sys.path和os.chdir,但感觉很乱.而且__file__并不总是可用的.
谢谢
我得到以下错误ImportError:如果我有以下导入,则没有名为numeric的模块
from numeric import *
Run Code Online (Sandbox Code Playgroud)
在我的python源代码中.如何在我的Windows机器上运行python 2.7.x编译器?
python-import ×10
python ×9
importerror ×3
python-3.x ×2
brownie ×1
cx-oracle ×1
dll ×1
dllimport ×1
logging ×1
mlflow ×1
namespaces ×1
oracle ×1
pip ×1
python-3.7 ×1