我想导入foo-bar.py,这是有效的:
foobar = __import__("foo-bar")
这不是:
from "foo-bar" import *
我的问题:有没有办法,我可以使用上面的格式,即从“foo-bar”导入*导入一个模块,其中有一个- ?
我想导入foo-bar.py,这是有效的:
foobar = __import__("foo-bar")
这不是:
from "foo-bar" import *
我的问题:有没有办法,我可以使用上面的格式,即从“foo-bar”导入*导入一个模块,其中有一个- ?
当前回答
Python在dash -方面有问题。所以改用importlib。 您可以像这样运行您的测试脚本
# importlib, because python has issues with dash '-' in module names
import importlib
img2txt = importlib.import_module("img2txt-textextractor")
event_with_txt = {...}
event_with_no_txt = {...}
def test_no_text():
response = img2txt.handler(event=event_with_txt, context='')
assert response["body"] == '"Detect Me If You Can. "'
def test_detected_text():
response = img2txt.handler(event=event_with_no_txt, context='')
assert response["body"] == '"unable to find anything"'
将测试代码命名为test_someName.py。从终端类型-上的相同目录运行
pytest
其他回答
Python在dash -方面有问题。所以改用importlib。 您可以像这样运行您的测试脚本
# importlib, because python has issues with dash '-' in module names
import importlib
img2txt = importlib.import_module("img2txt-textextractor")
event_with_txt = {...}
event_with_no_txt = {...}
def test_no_text():
response = img2txt.handler(event=event_with_txt, context='')
assert response["body"] == '"Detect Me If You Can. "'
def test_detected_text():
response = img2txt.handler(event=event_with_no_txt, context='')
assert response["body"] == '"unable to find anything"'
将测试代码命名为test_someName.py。从终端类型-上的相同目录运行
pytest
这是我的场景:我在一个git子模块中克隆了一个python库,它的名称中有一个破折号:
|- python-my-lib
| `- mylib.py
`- my-script.py
我花了很长时间才算出等价物:
# Do NOT use this!
sys.path.insert(1, './my-lib')
from mylib import MyClass
附加路径不是一个选项,因为它只有在相同目录中运行脚本时才有效。如果执行/home/user/bin/my-script.py,则会失败。
这就是解决方案:
import importlib
mylib_module = importlib.import_module("python-my-lib.mylib")
MyClass = mylib_module.MyClass
如果您知道更简单的解决方案,请随意进一步改进此解决方案。
在Python 3.6中 我有同样的问题“无效的语法”时直接
import 'jaro-winkler' as jw
说 "没有名为'jaro-winkler'的模块"
jw = __import__('jaro-winkler')
importlib.import_module()也一样。
最后我用PIP卸载jaro-winkler模块…仅供参考
就像其他人说的,你不能在python命名中使用-,有很多变通办法,如果你必须从一个路径中添加多个模块,一个这样的变通办法会很有用,就是使用sys.path
例如,如果你的结构是这样的:
foo-bar
├── barfoo.py
└── __init__.py
import sys
sys.path.append('foo-bar')
import barfoo
从Python 3.1开始,你可以使用importlib:
import importlib
foobar = importlib.import_module("foo-bar")
(https://docs.python.org/3/library/importlib.html)