我有一个名为的文件tester.py,位于/project.
/project有一个名为的子目录lib,其文件名为BoxTime.py:
/project/tester.py
/project/lib/BoxTime.py
Run Code Online (Sandbox Code Playgroud)
我想导入BoxTime的tester.我试过这个:
import lib.BoxTime
Run Code Online (Sandbox Code Playgroud)
结果如下:
Traceback (most recent call last):
File "./tester.py", line 3, in <module>
import lib.BoxTime
ImportError: No module named lib.BoxTime
Run Code Online (Sandbox Code Playgroud)
任何想法如何BoxTime从子目录导入?
编辑
该__init__.py是问题,但不要忘了提及BoxTime作为lib.BoxTime,或使用:
import lib.BoxTime as BT
...
BT.bt_function()
Run Code Online (Sandbox Code Playgroud) 我想导入foo-bar.py.这有效:
foobar = __import__("foo-bar")
Run Code Online (Sandbox Code Playgroud)
这不是:
from "foo-bar" import *
Run Code Online (Sandbox Code Playgroud)
我的问题:有什么方法可以使用上面的格式,即from "foo-bar" import *导入一个包含其中的模块-?
如何.py在Python 3.3+中导入任意python源文件(其文件名可以包含任何字符,并不总是以其结尾)?
我使用imp.load_module如下:
>>> import imp
>>> path = '/tmp/a-b.txt'
>>> with open(path, 'U') as f:
... mod = imp.load_module('a_b', f, path, ('.py', 'U', imp.PY_SOURCE))
...
>>> mod
<module 'a_b' from '/tmp/a-b.txt'>
Run Code Online (Sandbox Code Playgroud)
它仍然适用于Python 3.3,但根据imp.load_module文档,它已被弃用:
从版本3.3开始不推荐使用:不需要使用加载器来加载模块,并且不推荐使用find_module().
和imp模块文档建议使用importlib:
注意新程序应使用importlib而不是此模块.
在不使用已弃用的imp.load_module函数的情况下,在Python 3.3+中加载任意python源文件的正确方法是什么?
下面的代码给出了不同的输出Python2和在Python3:
from sys import version
print(version)
def execute(a, st):
b = 42
exec("b = {}\nprint('b:', b)".format(st))
print(b)
a = 1.
execute(a, "1.E6*a")
Run Code Online (Sandbox Code Playgroud)
Python2 打印:
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]
('b:', 1000000.0)
1000000.0
Run Code Online (Sandbox Code Playgroud)
Python3 打印:
3.2.3 (default, Apr 11 2012, 07:15:24) [MSC v.1500 32 bit (Intel)]
b: 1000000.0
42
Run Code Online (Sandbox Code Playgroud)
为什么Python2将函数b内部的变量绑定到execute函数字符串中的exec值,Python3而不执行此操作?我怎样才能实现Python2in 的行为Python3?我已经尝试将全局和本地的字典传递给exec函数Python3,但到目前为止还没有任何工作.
---编辑---
在阅读了Martijns的回答后,我进一步分析了这一点 …
python ×4
module ×2
python-3.x ×2
exec ×1
hyphen ×1
import ×1
python-2.7 ×1
python-3.3 ×1
subdirectory ×1