相关疑难解决方法(0)

Python中的相对导入3

我想从同一目录中的另一个文件导入一个函数.

有时它适用于我,from .mymodule import myfunction但有时我会得到:

SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

有时它适用from mymodule import myfunction,但有时我也得到:

SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

我不明白这里的逻辑,我找不到任何解释.这看起来完全随机.

有人可以向我解释这一切背后的逻辑是什么吗?

python python-import python-3.x

589
推荐指数
16
解决办法
38万
查看次数

从父文件夹导入模块

我正在运行Python 2.5.

这是我的文件夹树:

ptdraft/
  nib.py
  simulations/
    life/
      life.py
Run Code Online (Sandbox Code Playgroud)

(我也在__init__.py每个文件夹中,为了便于阅读,这里省略了)

如何nib从模块内导入life模块?我希望有可能不用修补sys.path.

注意:正在运行的主模块位于该ptdraft文件夹中.

python directory module path python-import

552
推荐指数
21
解决办法
59万
查看次数

Python的sys.path在哪里初始化?

Python的sys.path在哪里初始化?

UPD:Python在引用PYTHONPATH之前添加了一些路径:

    >>> import sys
    >>> from pprint import pprint as p
    >>> p(sys.path)
    ['',
     'C:\\Python25\\lib\\site-packages\\setuptools-0.6c9-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\orbited-0.7.8-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\morbid-0.8.6.1-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\demjson-1.4-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\stomper-0.2.2-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\uuid-1.30-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\stompservice-0.1.0-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\cherrypy-3.0.1-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\pyorbited-0.2.2-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\flup-1.0.1-py2.5.egg',
     'C:\\Python25\\lib\\site-packages\\wsgilog-0.1-py2.5.egg',
     'c:\\testdir',
     'C:\\Windows\\system32\\python25.zip',
     'C:\\Python25\\DLLs',
     'C:\\Python25\\lib',
     'C:\\Python25\\lib\\plat-win',
     'C:\\Python25\\lib\\lib-tk',
     'C:\\Python25',
     'C:\\Python25\\lib\\site-packages',
     'C:\\Python25\\lib\\site-packages\\PIL',
     'C:\\Python25\\lib\\site-packages\\win32',
     'C:\\Python25\\lib\\site-packages\\win32\\lib',
     'C:\\Python25\\lib\\site-packages\\Pythonwin']
Run Code Online (Sandbox Code Playgroud)

我的PYTHONPATH是:

    PYTHONPATH=c:\testdir
Run Code Online (Sandbox Code Playgroud)

我想知道PYTHONPATH之前的那些路径来自哪里?

python path sys

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

为什么使用sys.path.append(path)而不是sys.path.insert(1,path)?

编辑:基于Ulf Rompe的注释,重要的是你使用"1"代替"0",否则你将破坏sys.path.

我已经做了很长一段时间的python(超过一年),我总是很困惑,为什么人们建议你使用sys.path.append()而不是sys.path.insert().让我来证明一下.

假设我正在开发一个名为PyWorkbooks的模块(安装在我的计算机上),但我同时处理一个包含PyWorkbooks的不同模块(比方说PyJob).当我正在使用PyJob时,我发现PyWorkbooks中的错误正在纠正,所以我想导入一个开发版本.

有两种方法可以同时工作(例如,我可以将PyWorkbooks项目放在PyJob中),但有时我仍然需要使用路径.但是,我不能简单地对sys.path.append()PyWorkbooks所在的文件夹执行操作.为什么?因为python会首先找到我安装的PyWorkbooks!

这就是你必须做一个sys.path.insert(1,path_to_dev_pyworkbooks)的原因

综上所述:

sys.path.append(path_to_dev_pyworkbooks)
import PyWorkbooks # does NOT import dev pyworkbooks, imports installed one
Run Code Online (Sandbox Code Playgroud)

要么:

sys.path.insert(1, path_to_dev_pyworkbooks) # based on comments you should use **1 not 0**
import PyWorkbooks # imports correct file
Run Code Online (Sandbox Code Playgroud)

这对我来说已经引起了一些困扰,如果我们(作为一个社区)开始推荐sys.path.insert(1, path),我真的很喜欢它,好像你是手动插入一条路径我认为可以说这是你想要的路径用!

或者我有什么不对劲?这个问题有时会困扰我,我希望它在公开场合!

python path python-import pythonpath

81
推荐指数
3
解决办法
11万
查看次数

如何从其他目录导入.py文件?

我有这种文件结构(目录和箭头文件后):

model -> py_file.py 
report -> other_py_file.py
Run Code Online (Sandbox Code Playgroud)

主要__init__.py:

import model
import report
Run Code Online (Sandbox Code Playgroud)

型号目录:

import py_file
Run Code Online (Sandbox Code Playgroud)

报告目录:

import other_py_file
Run Code Online (Sandbox Code Playgroud)

现在在other_py_file我想要导入py_file,但是我尝试了什么,我给出错误,没有这样的模块.

我试过这个: from model import py_file

然后: import py_file

看起来这两个文件夹看不到对方.从其他目录导入文件的方法是什么?我是否需要在init .py文件中指定一些额外的导入?

python python-import openerp

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

从同一文件夹中的文件导入函数

我正在根据不同的导入规则在教程之后使用Python 3.5构建Flask应用程序.通过查找类似的问题,我设法通过将文件夹添加到路径来解决基于从嵌套文件夹导入的ImportError,但我仍然无法从同一文件夹(已在路径中)的脚本中导入函数.文件夹结构是这样的:

DoubleDibz  
??? app
?   ??? __init__.py
?   ??? api 
?   ?   ??? __init__.py
?   ?   ??? helloworld.py
?   ??? app.py
?   ??? common
?   ?   ??? __init__.py
?   ?   ??? constants.py
?   ??? config.py
?   ??? extensions.py
?   ??? static
?   ??? templates
??? run.py
Run Code Online (Sandbox Code Playgroud)

在app.py中,我使用以下代码从config.py导入一个函数:

import config as Config
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

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

我不明白是什么问题,是同一个文件夹中的两个文件.提前致谢

python flask python-3.x

22
推荐指数
3
解决办法
5万
查看次数