如何在Python中导入其他文件?
import file.py?例如,main.py我有:
from extra import *
Run Code Online (Sandbox Code Playgroud)
虽然这给了我所有的定义extra.py,但也许我想要的只是一个定义:
def gap():
print
print
Run Code Online (Sandbox Code Playgroud)
我怎么添加到import语句只得到gap从extra.py?
我试图找到一个关于是否最好使用的综合指南import module或from module import?我刚刚开始使用Python,我试图从最初的实践开始.
基本上,我希望如果有人能分享他们的经验,有什么喜好其他开发商,什么是避免任何的最好办法陷阱的道路?
目录结构:
main.py
my_modules/
module1.py
module2.py
Run Code Online (Sandbox Code Playgroud)
module1.py:
class fooBar():
....
class pew_pew_FooBarr()
....
...
Run Code Online (Sandbox Code Playgroud)
如何将所有类从module*添加到没有前缀的main(即使用它们像foo = fooBar(),而不是foo = my_modules.module1.fooBar()).
一个明显的决定是在main.py中写这样的东西:
from my_modules.module1 import *
from my_modules.module2 import *
from my_modules.module3 import *
...
Run Code Online (Sandbox Code Playgroud)
但是我不想在创建新模块N时更改main.py.那有解决方案吗?
我知道导入这样的类不是一个好主意,但我仍然对此感到好奇.
UPD:这个问题不同于这个问题在Python中加载一个文件夹中的所有模块,因为我的问题是加载没有命名空间的模块.
我找到了这个,但那不是我想要做的.
我想导入目录中所有文件中的所有类.基本上,我想替换这个:
from A import *
from B import *
from C import *
Run Code Online (Sandbox Code Playgroud)
有动态的东西,所以我__init__.py每次添加另一个文件时都没有继续编辑.
该glob解决方案似乎是相当于
import A
import B
import C
Run Code Online (Sandbox Code Playgroud)
这根本不一样.
我正在尝试让Python列出命名空间包中的所有模块.
我有以下文件结构:
cwd
|--a
| `--ns
| |--__init__.py
| `--amod.py
|--b
| `--ns
| |--__init__.py
| `--bmod.py
`--c
`--ns
|--__init__.py
`--cmod.py
Run Code Online (Sandbox Code Playgroud)
每个都__init__.py通过以下行将它的包定义为命名空间包:
__import__('pkg_resources').declare_namespace(__name__)
Run Code Online (Sandbox Code Playgroud)
该amod模块包含一个类A,bmod包含另一个类B并cmod包含C该类.
拥有干净的环境时会发生以下情况:
>>> import inspect, sys, glob
>>> sys.path += glob.glob('*')
>>> import ns
>>> inspect.getmembers(ns, inspect.ismodule)
[]
Run Code Online (Sandbox Code Playgroud)
如您所见,未列出模块.
现在,当我手动导入模块然后再次调用inspect时:
>>> inspect.getmembers(ns, inspect.ismodule)
[('amod', <module 'ns.amod' from 'a/ns/amod.pyc'>), ('bmod', <module 'ns.bmod' from 'b/ns/bmod.pyc'>), ('cmod', <module 'ns.cmod' from 'c/ns/cmod.pyc'>)]
Run Code Online (Sandbox Code Playgroud)
现在我想要在inspect不手动导入模块的情况下调用工作,那么我该如何实现呢?
如何在执行期间导入Python文件?
我创建了3个文件a.py,b.py并c.py在路径中C:\Users\qksr\Desktop\Samples
这些文件包含如下所示的代码:
a.py
from c import MyGlobals
def func2():
print MyGlobals.x
MyGlobals.x = 2
Run Code Online (Sandbox Code Playgroud)
b.py
import a
from c import MyGlobals
def func1():
MyGlobals.x = 1
if __name__ == "__main__":
print MyGlobals.x
func1()
print MyGlobals.x
a.func2()
print MyGlobals.x
Run Code Online (Sandbox Code Playgroud)
c.py
class MyGlobals(object):
x = 0
Run Code Online (Sandbox Code Playgroud)
当我执行代码b.py时,抛出以下错误:
ImportError: No module named a
Run Code Online (Sandbox Code Playgroud)
我相信我的工作目录是默认的,所有文件a,b,c都是我在samples文件夹中创建的.
如何在Python中导入python文件?
假设我在一个公共目录下有一堆 Python 文件,但其中可能存在任意数量的子目录:
/first/foo.py
/first/bar.py
/first/fizz/buzz.py
/first/numbers/one.py
/first/numbers/two.py
Run Code Online (Sandbox Code Playgroud)
我有一些任意文件,我想导入所有这些文件。手动,我可以这样做:
import first.foo
import first.bar
import first.fizz.buzz
import first.numbers.one
import first.numbers.two
Run Code Online (Sandbox Code Playgroud)
但相反,我希望能够做类似的事情:
import_everything_under('first')
Run Code Online (Sandbox Code Playgroud)
我知道已经出现了类似的问题:Recursively import all .py files from allfolders
但给出的答案和所谓的重复并不能回答这个问题。
这个问题被标记为可能重复:如何加载文件夹中的所有模块?
再说一遍,这并不能回答这个问题。该问题的答案不是递归的 - 它只会从直接目录导入项目,并且不包含子目录中的脚本,这是我的用例所需要的。
有没有办法导入当前目录中的所有模块,并返回它们的列表?
例如,对于具有以下目录的目录:
它会给你 [<module 'mod'>, <module 'mod2'>, <module 'mod3'>]
什么是最好的(阅读:最干净的)告诉Python从某个文件夹导入所有模块的方法?
我想让人们把他们的"mods"(模块)放在我的应用程序的一个文件夹中,我的代码应该在每次启动时检查并导入放在那里的任何模块.
我也不希望在导入的东西中添加额外的范围(不是"myfolder.mymodule.something",而是"东西")
对不起,如果我在这期间弄错了一些事实,但我只编程了大约一年,因为我在我的学校开始了一个计算机课程,对不起,如果这个问题在我到处看之前已经得到了回答,但我不知道是什么搜索.最近我发现了一个游戏,您可以使用注入器将python代码注入其中,但找到代码的唯一方法是使用:
import modulename
print dir(modulename)
Run Code Online (Sandbox Code Playgroud)
然后打印dir(modulename.submodulename)
这会将该模块中的所有子模块打印到游戏的日志文件中.使用这种技术,我开发了一个脚本,在执行时将找到该目录中的所有子模块并将它们写入文件.
import modulename
myfile=open("name.txt","w")
myfile.write("modulename\n")
for a in dir(modulename):
a="modulename"+"."+a
for b in dir(a):
b=a+"."+b
for c in dir(b):
c=b+"."+c
if ".__" in c:
pass
elif "._" in c:
pass
else:
myfile.write(c+"\n")
if ".__" in b:
pass
if "._" in b:
pass
else:
myfile.write(b+"\n")
if ".__" in a:
pass
if "._" in a:
pass
else:
myfile.write(a+"\n")
print "Done"
myfile.close()
Run Code Online (Sandbox Code Playgroud)
不幸的是,当运行"something.something"时,模块不存在.这是模块"随机"的示例,其中"random.weibullvariate"是一个真实的模块,但是经过第二个"."的任何东西.不在随机子模块中.
random.weibullvariate.title.translate
random.weibullvariate.title.upper
random.weibullvariate.title.zfill
random.weibullvariate.title
random.weibullvariate.translate.capitalize
random.weibullvariate.translate.center
random.weibullvariate.translate.count
random.weibullvariate.translate.decode
random.weibullvariate.translate.encode
random.weibullvariate.translate.endswith
random.weibullvariate.translate.expandtabs
random.weibullvariate.translate.find
random.weibullvariate.translate.format
random.weibullvariate.translate.index …Run Code Online (Sandbox Code Playgroud) 我想导入 python 目录中的所有 python 模块,并遇到了以下代码片段:
for name in os.listdir("modules"):
if name.endswith(".py"):
module = name[:-3] # remove extension name for convenience.
globals()[module] = __import__(os.path.join("modules", name))
Run Code Online (Sandbox Code Playgroud)
程序输出:
ImportError: Import by filename is not supported.
如何按文件名导入文件?
我知道存在这个问题,但它们不仅不起作用,而且也不完全是我想要的。我正在开发一款赛车游戏,想要动态加载文件夹中的所有赛道(它们存储为 .py 而不是 .json)。我不想知道曲目的名称,因为用户可以随意修改/添加它们。我只想导入他们的数据。因此,例如:
>tracks
>>track0.py
>>track1.py
>>track2.py
>>track3.py
>>track4.py
Run Code Online (Sandbox Code Playgroud)
在每个轨道中,我都有这样的数据:
track_ground_data = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1],
[1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1], …Run Code Online (Sandbox Code Playgroud) python ×12
import ×5
module ×5
python-3.x ×2
directory ×1
file ×1
finder ×1
inspect ×1
namespaces ×1
package ×1