相关疑难解决方法(0)

从Python中的姐妹子目录导入?

所以,我在Stack Overflow上看到了一些类似的问题,但似乎没有解决我的问题或一般情况.所以,希望这个问题可以解决这个问题,并且让我头痛不已.我有一个形式的git repo:

repo/
   __init__.py
   sub1/
      __init__.py
      sub1a/
         __init.py
         mod1.py
   sub2/
      __init__.py
      mod2.py
Run Code Online (Sandbox Code Playgroud)

如何从mod1.py导入mod2.py,反之亦然,这取决于mod1.py或mod2.py是脚本(当每个分别导入 - 未导入时)如何变化?

python import

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

在Idle shell中导入模块

我正在尝试学习python而我在导入模块时遇到问题.我有一个.pyc文件,我试图导入到名为dfa.pyc的空闲shell中

我把文件放在一个名为xyz的文件夹中.我使用以下方法导航到此文件夹

    os.chdir('/Users/xxx/Desktop/xyz')
Run Code Online (Sandbox Code Playgroud)

所以现在,如果我尝试运行命令:

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

我收到错误:

    ImportError: No module named dfa
Run Code Online (Sandbox Code Playgroud)

如果我运行命令:

    os.path.isfile('dfa.pyc') 
Run Code Online (Sandbox Code Playgroud)

它返回true.

有人可以解释我如何导入dfa.pyc文件?

谢谢

python pyc python-3.x

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

Python __init__.py vs sys.path.append/insert

知道如何对导入Python模块不在路径,但我还没有遇到过使用Python的__init.py__ VS sys.path.insert.哪种方法更好?是否有任何明显的缺点,如性能?还有一个"Pythonic?"

我能想到的一个场景是,我有一个用户下载并放在任何目录中的程序,所以我不知道绝对路径(除非我以编程方式得到它).文件夹结构是

working dir
    __init__.py
    foo.py
    src/
        my_utils.py
        __init__.py
Run Code Online (Sandbox Code Playgroud)

我没有看到使用__init__.py或更改sys.path之间的任何区别.有没有什么方案你可以想到它会产生什么影响?

我的问题的第2部分是,为什么你必须做任何事情才能从子目录导入模块?我对Python很新,所以也许我不明白为什么摆弄路径或创建init文件是样板文件.对我来说,这似乎是一种不必要的复杂情况.如果我在当前工作目录中有"dir"并说"import dir.my_utils",我不明白为什么我要列出我希望能够在__init__.py中导入的所有内容.

如果这是重复的道歉,但我在发布之前进行了搜索.

编辑:这是另一个有用的链接:自动调用常见的初始化代码而不创建__init__.py文件

python coding-style python-2.7

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

从嵌套文件夹导入模块

我有这样的文件夹结构

\n\n
main_folder\n|\n|--done\n|  |\n|  |--test1\n|  |--__init__.py\n|\n|---check.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

__init__.py:

\n\n
class Tries(object):\n    def __init__(self):\n        print "Test"\n
Run Code Online (Sandbox Code Playgroud)\n\n

检查.py:

\n\n
from done.test1 import Tries\nTries()\n
Run Code Online (Sandbox Code Playgroud)\n\n

错误:

\n\n
---------------------------------------------------------------------------\nImportError                               Traceback (most recent call last)\n<ipython-input-8-10953298e1df> in <module>()\n----> 1 from done.test1 import Tries\n\nImportError: No module named done.test1 \n
Run Code Online (Sandbox Code Playgroud)\n\n

我无法从嵌套文件夹导入模块。有什么办法可以做到这一点吗?

\n\n

编辑:

\n\n

在萨尔瓦的回答之后,我改变了我的结构,如下所示

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 check.py\n|--__init__.py(no content)\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 done\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py(no content)\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test1\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py <-- this files contains your Tries class\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在也抛出同样的错误。

\n

python import python-2.7

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

Python:从文件夹导入每个模块?

什么是最好的(阅读:最干净的)告诉Python从某个文件夹导入所有模块的方法?

我想让人们把他们的"mods"(模块)放在我的应用程序的一个文件夹中,我的代码应该在每次启动时检查并导入放在那里的任何模块.

我也不希望在导入的东西中添加额外的范围(不是"myfolder.mymodule.something",而是"东西")

python directory import

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

ImportError - 在同一级别使用 Python 包

我有两个 Python 包,其中一个需要由另一个导入。目录结构如下:

workspace/
  management/
    __init__.py
    handle_management.py
    other_management.py
  utils/
    __init__.py
    utils_dict.py
Run Code Online (Sandbox Code Playgroud)

我正在尝试从文件utils中的项目导入功能handle_management.py

import utils.utils_dict
Run Code Online (Sandbox Code Playgroud)

我在尝试运行时遇到错误handle_management.py

ImportError: No module named utils.utils_dict
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多有关如何解决此问题的文章,但似乎找不到有效的解决方案。

我从从相对路径导入模块开始- 我尝试了适用的解决方案,但没有一个有效。

是唯一可以workspace/通过 提供的解决方案site_packages吗?如果是这样,最好的方法是什么?

编辑:

我尝试将 - 添加/home/rico/workspace/PYTHONPATH- 没有运气。

编辑2:

我能够成功使用 klobucar 的解决方案,但我认为它不会作为通用解决方案,因为该实用程序将被其他几个开发人员使用。我知道我可以使用一些 Python 泛化来确定每个用户的相对路径。我只是觉得有一个更优雅的解决方案。

最终,该脚本将通过 cron 运行,对多个 Python 项目执行单元测试。每个开发人员都可以使用它,以确保在开发过程中进行集成测试。

我需要能够使这个更加普遍。

编辑3:

抱歉,对于我想要实现的目标,我真的不喜欢这些解决方案。我很欣赏您的意见 - 我正在使用它们作为临时解决方案。作为一个完整的修复,我将考虑添加一个site_packages目录中可用的脚本,该脚本将添加到PYTHONPATH. 这是多台机器和多个开发人员都需要的。

一旦我构建了完整的解决方案,我将在此处发布我所做的事情并将其标记为解决方案。

编辑4:

我觉得我这个问题好像没有很好地表达我的需求。下面的答案很好地解决了这个问题 - 但不是我的实际需求。因此,我在另一篇文章中重组了我的问题。我考虑编辑这个,但是下面的答案(这对其他人非常有帮助)对更改没有意义,并且看起来不合适且无关紧要。

对于这个问题的修订版本,请参阅Unable to import Python package universally

python

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

如何在Python 3中使用绝对导入来导入位于其父目录中的包?

我有一个像这样的 python 包目录:

proj/
  mod_a/
    __init__.py
    x.py
    submod_x/
      __init__.py
      y.py
  mod_b/
    __init__.py
    z.py
Run Code Online (Sandbox Code Playgroud)

与 x.py:

import submod_x.y
Run Code Online (Sandbox Code Playgroud)

z.py:

import sys, os.path
sys.path.append(os.path.abspath('../'))

import mod_a.x
Run Code Online (Sandbox Code Playgroud)

现在当我跑步时:

$ python2 z.py
Run Code Online (Sandbox Code Playgroud)

我用 y.py 编码完成了事情

但是当我跑步时:

$ python3 z.py
Run Code Online (Sandbox Code Playgroud)

我有一个例外:

Traceback (most recent call last):
File "z.py", line 4, in <module>
  import mod_a.x
File ".../proj/mod_a/x.py", line 1, in <module>
  import submod_x.y
ImportError: No module named 'submod_x'
Run Code Online (Sandbox Code Playgroud)

我想知道Python 2和Python 3在导入包时有什么区别,以及如何在Python 3中使用绝对导入来导入位于其父目录中的包?

python python-3.x

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

从特定文件夹导入模块

我有一个名为的文件夹Script,里面有temp.py脚本.我的临时脚本从被调用的子文件夹导入模块lib.

Lib文件夹里面有空__init__.py和我的parent_computer_test.py脚本.

在我的temp.py脚本中是以下代码:

import lib.parent_computer_test as parent_computer_test
parent_computer_test.mainChunk()
parent_computer_test.splitChunks()
Run Code Online (Sandbox Code Playgroud)

我设法从子文件夹导入模块没有任何更大的问题.

这个工作流程/脚本工作正常,由于特定原因,我的lib文件夹必须在我的计算机上的其他位置.有一个很长的故事,但它必须是那样的.

长话短说.我希望我temp.py/Script文件夹从文件夹lib(或任何其他名称)导入模块parent_computer_test.py,但同时此文件夹不是子文件夹/Script- 因此它位于计算机的其他位置.它可以是C:/development/...什么的.

所以我的问题是如何从特定文件夹导入模块?

python

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

如何重新加载所有导入的模块?

我有几个模块,在开发Sublime Text软件包时,我想重新加载而不必重新启动Sublime Text。

我正在运行Sublime Text内部版本3142,该版本python3.3连续运行其软件包/插件。但是,在开发插件时,我将添加到path的第三方模块导入为:

import os
import sys

def assert_path(module):
    """
        Import a module from a relative path
        /sf/ask/19546621/
    """
    if module not in sys.path:
        sys.path.insert( 0, module )

current_directory = os.path.dirname( os.path.realpath( __file__ ) )
assert_path( os.path.join( current_directory, 'six' ) ) # https://github.com/benjaminp/six

import six
Run Code Online (Sandbox Code Playgroud)

但是,当我编辑模块的源代码时,six我需要再次关闭并打开Sublime Text,否则Sublime Text无法获取对sixpython模块的更改。


到目前为止我尝试过的一些代码:

print( sys.modules )
import git_wrapper
imp.reload( find_forks )
imp.reload( git_wrapper )
imp.reload( sys )
Run Code Online (Sandbox Code Playgroud)
  1. 从控制台重新加载python模块的正确方法
  2. 重新加载模块,给出NameError:名称'reload'未定义

python module python-import python-3.x

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

python从兄弟文件夹导入

我正在尝试从同级文件夹中的 python 文件导入模块。我在这里阅读了几个类似的问题并尝试应用那里列出的解决方案,但我无法解决问题。

结构如下:

parentfolder/gfolder/codefolder/fileA.py
parentfolder/gfolder/utilfolder/util.py
Run Code Online (Sandbox Code Playgroud)

gfoldercodefolder并且utilfolder都有一个__init__.py.

我正在尝试在 fileA.py 中执行以下操作:

import gfolder.utilfolder.util as util
Run Code Online (Sandbox Code Playgroud)

我还尝试在导入语句之前添加:

sys.path.append(".../parentfolder/")
Run Code Online (Sandbox Code Playgroud)

这也不起作用:

import gfolder.utilfolder.util as util
ModuleNotFoundError: No module named 'gfolder'
Run Code Online (Sandbox Code Playgroud)

类似问题中的解决方案说要包含__init.py__在我已经拥有的目录中。

编辑:现在无论是sys.appendsys.insert工作,问题是,我包括在路径的结尾斜线。当我把它拿出来时,一切正常。

python

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