相关疑难解决方法(0)

Python 相对导入在包内而不是在路径上

如何将 python 包中的父目录(不在路径上)中的文件导入到子目录中的文件中?

我不太清楚 python 打包的词汇,所以举个例子:

dir1/
    __init__.py
    runner.py
    in_dir1.py
    dir2/
        __init__.py
        in_dir2.py
Run Code Online (Sandbox Code Playgroud)

dir1/in_dir1.py:

def example():
    print "Hello from dir1/in_dir1.example()"
Run Code Online (Sandbox Code Playgroud)

dir1/dir2/in_dir2.py

import in_dir1   #or whatever this should be to make this work
print "Inside in_dir2.py, calling in_dir1.example()"
print in_dir1.example()
Run Code Online (Sandbox Code Playgroud)

鉴于它dir1不在 python 路径上,我正在寻找导入in_dir1in_dir2.

我尝试from .. import in_dir1from ..dir1 import in_dir1 基于此问答,但都不起作用。执行该意图的正确方法是什么?这个问答似乎包含了答案;但是,我不太确定该怎么做/如何使用PEP 366实际解决我的问题

两个__init__.py文件都是空的,我使用的是v2.6

我试图在不使用谷歌不断出现的任何路径黑客的情况下做到这一点。

python packaging pythonpath

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

Python相对导入导致SyntaxError异常

根据python文档,自python 2.5开始支持相对导入和内部包引用。我当前正在运行Python 2.7.3。因此,我尝试在自己的程序包中实现此功能,以便将其用于更简单的导入。我很惊讶地发现它引发了SyntaxError异常,我希望有人可以帮助您找到原因。

我设置了一个测试目录进行测试:

tester
??? __init__.py
??? first_level.py
??? sub
    ??? __init__.py
    ??? second_level.py
Run Code Online (Sandbox Code Playgroud)

两个__init__.py模块都为空。其他模块是:


# first_level.py
print "This is the first level of the package"
Run Code Online (Sandbox Code Playgroud)
# sub/second_level.py
import ..first_level
print "This is the second level"
Run Code Online (Sandbox Code Playgroud)

当我尝试导入second_level模块时,出现以下错误:

Python 2.7.3 (default, Aug  1 2012, 14:42:42) 
[GCC 4.2.1 Compatible Apple Clang 4.0 ((tags/Apple/clang-421.0.57))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Welcome!
>>> import tester
>>> import tester.sub.second_level
Traceback (most recent call last):
  File "<stdin>", line …
Run Code Online (Sandbox Code Playgroud)

python import syntax-error

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

Python中导入模块的方法有哪些?

我做了一些研究,发现了以下文章:http : //effbot.org/zone/import-confusion.htm。虽然这似乎是一个很好的指南,但它写于 1999 年,不久前。我正在使用 Python 3.4.3,所以我认为有些事情发生了变化,这让我很担心,因为我不想学习不适用的内容。因此,在 Python 3 中,导入包和模块的所有方法是什么?哪些方式是最常见的,应该优先于其他方式使用?

python import python-import

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

如何正确分配带有数据文件的pip包?

我有以下软件包要分发:

mymodule/
    data/
        1.txt
    mymodule/
        __init__.py
    tests/
        test_mymodule.py
    setup.py
Run Code Online (Sandbox Code Playgroud)

为了在vitualenv下安装它,我应用以下命令:

pip install .
Run Code Online (Sandbox Code Playgroud)

一切都安装正确,但我的数据文件的路径已损坏。

>>> from mymodule import get
>>> print(get())
...
FileNotFoundError: [Errno 2] No such file or directory: '/home/alexander/Stuff/pip_example/mymodule_test/venv/lib/python3.5/site-packages/mymodule/../data/1.txt'
Run Code Online (Sandbox Code Playgroud)

经过研究发现,该文件夹data是在导致错误的virtualenv文件夹的根目录中创建的。我应该如何改进代码以保持测试正常工作并拥有正确的数据文件路径?

文件内容:

数据/1.txt

yes
Run Code Online (Sandbox Code Playgroud)

mymodule / __ init__.py

import os

src = os.path.join(
    os.path.dirname(__file__),
    '../data/1.txt'
)

def get():
    with open(src) as f:
        return f.read().strip()
Run Code Online (Sandbox Code Playgroud)

测试/ test_mymodule.py

import unittest
import mymodule

class MymoduleTest(unittest.TestCase):
    def test_get(self):
        s = mymodule.get()
        self.assertEqual(s, "yes")
Run Code Online (Sandbox Code Playgroud)

setup.py

from distutils.core import setup

data_files = [ …
Run Code Online (Sandbox Code Playgroud)

python pip setup.py python-3.x

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

Python:引用另一个项目

我希望能够从命令行运行我的Python项目.我正在引用其他项目,所以我需要能够在其他文件夹中运行模块.

使这项工作的一种方法是修改Pythonpath环境变量,但我认为这是滥用.另一个黑客是将我想要的所有文件复制到一个目录中,然后运行Python.有没有更好的方法呢?

注意:我实际上是在Eclipse中编程,但我希望能够远程运行该程序.

类似的问题:

python command-line

4
推荐指数
2
解决办法
1419
查看次数

导入错误.通函参考

我有这样的包裹

package/
    __init__.py
    subpackage1/
        __init__.py
        moduleA.py
        moduleB.py
        moduleC.py
        moduleD.py
    subpackage2/
       __init__.py
       moduleX.py
       moduleY.py
       moduleZ.py
Run Code Online (Sandbox Code Playgroud)

在moduleB.py中,我正在导入

from moduleA import bar
Run Code Online (Sandbox Code Playgroud)

在moduleA中,我正在导入

from moduleB import foo
Run Code Online (Sandbox Code Playgroud)

我收到了ImportError.

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

这可能是什么问题?为了避免这个问题,我该怎么办?我应该在_ init _ .py pf包,subpackage1,subpackage2中写什么?

_ INIT _ subpackage1的的.py

from moduleA import *
from moduleB import *
from moudleC import *
from moudleD import *
Run Code Online (Sandbox Code Playgroud)

subpackage2的_ init _ .py

from moduleX import *
from moduleY import *
from moduleZ import *
Run Code Online (Sandbox Code Playgroud)

_ init _ .py包

from subpackage1 import * …
Run Code Online (Sandbox Code Playgroud)

python hierarchy importerror

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

仅使用AWS Lambda加载本地模块时出现问题

应用程序结构:

.
??? Makefile
??? Pipfile
??? Pipfile.lock
??? README.md
??? template.yaml
??? tests
?   ??? __init__.py
?   ??? unit
?       ??? lambda_application
?           ??? test_handler.py
?           ??? test_parent_child_class.py
??? lambda_application
    ??? __init__.py
    ??? first_child_class.py
    ??? lambda_function.py
    ??? second_child_class.py
    ??? requirements.txt
    ??? parent_class.py

4 directories, 14 files
Run Code Online (Sandbox Code Playgroud)

来自的代码示例lambda_function.py

import os
import json
from hashlib import sha256
import boto3
from requests import Session
from .first_child_class import FirstChildClass


def lambda_handler(event, context):
    # Do some stuff.
Run Code Online (Sandbox Code Playgroud)

照原样,我收到错误消息“无法导入模块'lambda_function'”,但是如果我注释掉了最后一个导入,“从.first_child_class import FirstChildClass”,它可以越过该部分并得到我没有的错误。为该类加载了模块。

当我在lambci / …

python amazon-web-services python-3.x aws-lambda

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

关于"进口"的基本问题

我对Python的import陈述有一些疑问:

  1. import <module>和之间有什么区别from <module> import *

  2. 如何导入不在同一目录中的模块?(而不是PythonHome)

请考虑我是一个Python新手

python import

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

如何在 Django Settings.py 中导入另一个 Python 3 文件?

我正在使用 Python 3。我在同一目录中有两个 Python 文件:first.py 和 second.py。在 first.py 的开头,我使用:

from second import *
Run Code Online (Sandbox Code Playgroud)

但是,它返回以下错误消息:

ModuleNotFoundError: No module named 'second'
Run Code Online (Sandbox Code Playgroud)

我应该如何在 first.py 中导入它?

更新:为了澄清我的具体用例,我试图在 Django 中拆分我的 settings.py。我有一个主要的 settings.py 文件和另一个只包含机密信息的文件。我遵循以下文档该文档在 settings.py 中使用以下行:

from settings_local import *
Run Code Online (Sandbox Code Playgroud)

请注意,settings_local.py 位于同一目录中。但是,它返回以下错误消息:

ModuleNotFoundError: No module named 'settings_local'
Run Code Online (Sandbox Code Playgroud)

我知道文档说“为了与 Django 1.4 及更高版本兼容,需要修改下面列出的一些示例。” 但我不知道如何在 Python 3 中使用它。

django import importerror django-settings python-3.x

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

从另一个目录导入文件

我有一个文件调用entryPoint.py

from .commonLib.deviceLib import *
Run Code Online (Sandbox Code Playgroud)

我有一个名为deviceLib.py

import math
import sys
import logging
import requests
import this

class DeviceLib(object):
    def __init__(self, connectionDb):
        self.__db = connectionDb
Run Code Online (Sandbox Code Playgroud)

树是这样的:

/test
    entryPoint.py
/commonLib
    __init__.py
    deviceLib.py
Run Code Online (Sandbox Code Playgroud)

当我执行时,python entryPoint.py我收到错误:Attempted relative import in non-package。请帮我。

python python-2.7

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