相关疑难解决方法(0)

如何编写正确/正确的包__init__.py文件

我的包具有以下结构:

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__使用?

python packages

179
推荐指数
3
解决办法
13万
查看次数

在Python中处理项目脚本中的路径/可执行文件的最佳实践(例如Django的manage.py或fabric)

我在一个相当标准化的目录结构中对不同的项目(我是一名科学家)做了很多工作.例如:

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/中,而不必处理路径问题或导入问题.

做这个的最好方式是什么?

python fabric

13
推荐指数
2
解决办法
4482
查看次数

python 回溯中的文件“<string>”

我正在将一个巨大的 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)

python python-import traceback python-2.7

5
推荐指数
1
解决办法
2万
查看次数

为什么要删除__init__.py中的模块?

我正在对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)

这样做的理由是什么?

python python-import

1
推荐指数
1
解决办法
76
查看次数

标签 统计

python ×4

python-import ×2

fabric ×1

packages ×1

python-2.7 ×1

traceback ×1