相关疑难解决方法(0)

Python 3中的包不需要__init__.py吗?

我使用的是Python 3.5.1.我在这里阅读了文档和包部分:https://docs.python.org/3/tutorial/modules.html#packages

现在,我有以下结构:

/home/wujek/Playground/a/b/module.py
Run Code Online (Sandbox Code Playgroud)

module.py:

class Foo:
    def __init__(self):
        print('initializing Foo')
Run Code Online (Sandbox Code Playgroud)

现在,在/home/wujek/Playground:

~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
Run Code Online (Sandbox Code Playgroud)

同样,现在在家里,超级文件夹Playground:

~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
Run Code Online (Sandbox Code Playgroud)

实际上,我可以做各种各样的事情:

~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Run Code Online (Sandbox Code Playgroud)

为什么这样做?我虽然有被需要的__init__.py文件(空的都可以)两种a,并bmodule.py要导入的时候Python的路径指向Playground文件夹?

这似乎已经从Python 2.7改变了:

~ $ PYTHONPATH=Playground …
Run Code Online (Sandbox Code Playgroud)

python package python-3.x

146
推荐指数
5
解决办法
6万
查看次数

Python从子文件夹导入

我试图为每个学生在单独的文件夹中对一些python提交进行评分.要做到这一点,有一个函数,比如我想运行的f().我知道如果我当前的路径与文件所在的路径相同,我可以这样做

import filename
filename.f()
Run Code Online (Sandbox Code Playgroud)

但是,还有更好的方法吗?例如,假设目录结构如下:

main.py
student/run_this.py
Run Code Online (Sandbox Code Playgroud)

我知道如果学生文件夹中有"__init__.py"文件,我可以输入

import student.run_this
Run Code Online (Sandbox Code Playgroud)

但是,没有该文件,它不起作用.

我发现的一些类似问题

但这些都没有给出特别令人满意的答案.

python python-import python-3.x

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

在Python中导入分支的模块,而不是已安装的模块

我想对GitHub上的公共项目进行更改(如果有的话,可能会做出贡献)。我已经分叉并克隆了模块,但是我不清楚如何让我的程序导入本地库而不是“官方”安装的模块。

我尝试将其克隆到项目文件夹中,但是当我导入并尝试使用它时,事情变得很奇怪 calmap\calmap.plot()

我也尝试做sys.path.append和文件夹位置。但它似乎仍然是进口官方的,而不是分叉的。

我假设我可以将程序放在模块文件夹中,以便首先找到该模块,但是我无法对多数民众赞成在“正确”的方式进行映像。

|
|-->My_Project_Folder/
|
|-->Forked_Module/
     |-->docs/
     |-->Forked_Module/
          |-->__init__.py
Run Code Online (Sandbox Code Playgroud)

python module github

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

无法从模块导入子模块

我的项目有以下结构

Object_Detection/
                 setup.py
                 setup.cfg
                 requirement.txt
                 object_detection/
                                  models
                                  __init__.py #contains from . import models
                 tests/ 
                       # inside tests dir
                       test_utils_image.py
                       __init__.py #empty
                 utils/
                      # inside utils dir
                      __init__.py #inside 
                      utils_image_preprocess.py
                      utils_image.py
                      utils_tfrecord.py
Run Code Online (Sandbox Code Playgroud)

现在utils 目录中的init .py 包含以下代码。

# inside __init__.py
from . import utils_image_preprocess
from . import utils_image
from . import utils_tfrecord
Run Code Online (Sandbox Code Playgroud)

在init .py 文件之上运行会出现错误:

ImportError: attempted relative import with no known parent package
Run Code Online (Sandbox Code Playgroud)

测试目录中的 test_utils.py 包含以下代码

# inside test_utils.py
from object_detection.utils import utils_image
Run Code Online (Sandbox Code Playgroud)

运行 test_utils.py 时出现以下错误

ImportError: cannot import name …
Run Code Online (Sandbox Code Playgroud)

python oop package python-3.x

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

标签 统计

python ×4

python-3.x ×3

package ×2

github ×1

module ×1

oop ×1

python-import ×1