我的包具有以下结构:
mobilescouter/
__init__.py #1
mapper/
__init__.py #2
lxml/
__init__.py #3
vehiclemapper.py
vehiclefeaturemapper.py
vehiclefeaturesetmapper.py
...
basemapper.py
vehicle/
__init__.py #4
vehicle.py
vehiclefeature.py
vehiclefeaturemapper.py
...
Run Code Online (Sandbox Code Playgroud)
我不确定__init__.py文件应该如何正确编写.
的__init__.py #1样子:
__all__ = ['mapper', 'vehicle']
import mapper
import vehicle
Run Code Online (Sandbox Code Playgroud)
但是应该__init__.py #2怎么样?我的是:
__all__ = ['basemapper', 'lxml']
from basemaper import *
import lxml
Run Code Online (Sandbox Code Playgroud)
什么时候应该__all__使用?
我在一个相当标准化的目录结构中对不同的项目(我是一名科学家)做了很多工作.例如:
project
/analyses/
/lib
/doc
/results
/bin
Run Code Online (Sandbox Code Playgroud)
我将所有各种实用程序脚本放在/ bin /中,因为清洁度与敬虔相关.但是,我必须硬编码路径(例如../../x/y/z)然后我必须在./bin/中运行它们或者它们会中断.
我已经使用了Django,它有/manage.py运行各种django-things并自动处理路径.我还使用了fabric来运行各种用户定义的函数.
问题:我该如何做类似的事情?什么是最好的方式?我可以很容易地在/manage.py中写一些内容来将root目录注入sys.path等,但是我希望能够执行"./manage.py foo"运行/bin/foo.py.或者是否可以让Fabric从某个目录中调用可执行文件?
基本上 - 我想要一些简单和低维护的东西.我希望能够将可执行脚本/文件/删除到./bin/中,而不必处理路径问题或导入问题.
做这个的最好方式是什么?
我正在将一个巨大的 py 模块重构为包 - 为了不破坏现有代码,我将其内容移动到package/__init__.py模块(将代码添加到 __init__.py)并继续从那里拆分它。我注意到在某个时刻,在我的回溯中我得到:
Traceback (most recent call last):
File "<string>", line 656, in DoItemMenu
File "bash\balt.py", line 2109, in PopupMenu
link.AppendToMenu(menu,parent,*args)
File "bash\balt.py", line 2225, in AppendToMenu
for link in self.links: link.AppendToMenu(subMenu,window,data)
...
Run Code Online (Sandbox Code Playgroud)
其中的行File "<string>"对应于特定package/__init__.py模块。此外,PyCharm 的调试器显示“帧不可用”行,并且不会单步执行__init__.py. 为什么?与进口模式有关吗?
该代码由启动器类导入:
class UnicodeImporter(object):
def find_module(self,fullname,path=None):
if isinstance(fullname,unicode):
fullname = fullname.replace(u'.',u'\\')
exts = (u'.pyc',u'.pyo',u'.py')
else:
fullname = fullname.replace('.','\\')
exts = ('.pyc','.pyo','.py')
if os.path.exists(fullname) and os.path.isdir(fullname):
return self
for ext in …Run Code Online (Sandbox Code Playgroud) 我正在对PyTorch源代码进行一些研究。作者实际上在该文件中删除了模块。
from .adadelta import Adadelta # noqa: F401
from .adagrad import Adagrad # noqa: F401
from .adam import Adam # noqa: F401
del adadelta
del adagrad
del adam
Run Code Online (Sandbox Code Playgroud)
这样做的理由是什么?