我有以下文件夹结构.
application/app/folder/file.py
我想从另一个驻留的Python文件中的file.py中导入一些函数
application/app2/some_folder/some_file.py
我试过了
from application.app.folder.file import func_name
和其他一些尝试,但到目前为止我无法正确导入.我怎样才能做到这一点?
Python模块和Python包之间有什么区别?
另请参阅:"package"和"module"之间的区别(对于其他语言)
我使用的是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
,并b
为module.py
要导入的时候Python的路径指向Playground
文件夹?
这似乎已经从Python 2.7改变了:
~ $ PYTHONPATH=Playground …
Run Code Online (Sandbox Code Playgroud) 正如标题所说,我似乎无法让迁移工作.
该应用程序最初低于1.6,因此我了解迁移最初不会出现,事实上,如果我运行,python manage.py migrate
我得到:
Operations to perform:
Synchronize unmigrated apps: myapp
Apply all migrations: admin, contenttypes, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Installing custom SQL...
Installing indexes...
Running migrations:
No migrations to apply.
Run Code Online (Sandbox Code Playgroud)
如果我对任何模型进行更改myapp
,它仍然会按预期显示未迁移.
但如果我跑,python manage.py makemigrations myapp
我得到:
No changes detected in app 'myapp'
Run Code Online (Sandbox Code Playgroud)
似乎没关系我运行命令的内容或方式,它从未检测到应用程序有更改,也没有将任何迁移文件添加到应用程序.
有没有办法迫使应用程序进行迁移,并基本上说"这是我的工作基础"或任何东西?或者我错过了什么?
我的数据库是一个PostgreSQL,如果它有帮助的话.
我写了一个模块(文件my_mod.py
夹中的文件文件my_module
).目前,我正在cool_script.py
使用驻留在该文件夹中的文件cur_proj
.我已经使用File - open打开了PyCharm中的文件夹(我假设,因此,它是一个PyCharm项目).
在ProjectView(CMD-7)中,我可以看到我的项目cur_proj
(红色)和"外部库"下的内容my_module
.在cool_script.py中,我可以写
from my_module import my_mod as mm
Run Code Online (Sandbox Code Playgroud)
而PyCharm甚至为my_mod提出建议.到现在为止还挺好.
但是,当我尝试运行cool_script.py时,PyCharm告诉我 "没有名为my_module的模块"
这对我来说很奇怪,因为
A)在终端(OS 10.10.2)中,在python中,我可以导入模块没问题 - .bashrc中的PYTHONPATH中有相应的条目
B)在PyCharm中 - 设置 - 项目cur_proj - 项目解释器 - 在python解释器旁边的CogWheel - 更多 - 显示所选解释器图标的路径,PYTHONPATH的路径确实出现(我认为应该这样)
因此,当我尝试运行cool_script.py时,为什么会出现错误?- 我错过了什么?
笔记:
my_module
正确的道路__init__.py
文件(空文件)放入my_module
和放入cur_proj
virtualenv
当我进入PyCharm运行 - 编辑配置时,对于我当前的项目,有两个选项带有复选标记:" 将内容根添加到PYTHONPATH "和" 将源根添加到PYTHONPATH ".当我同时取消选中时,我可以加载我的模块.
所以它现在有效 - 但为什么呢?
出现了更多问题:
这是我第一次真正坐下来尝试python 3,似乎失败了.我有以下两个文件:
config.py中定义了一些函数以及一些变量.我把它剥离到以下内容:
但是,我收到以下错误:
ModuleNotFoundError: No module named 'config'
Run Code Online (Sandbox Code Playgroud)
我知道py3约定是使用绝对导入:
from . import config
Run Code Online (Sandbox Code Playgroud)
但是,这会导致以下错误:
ImportError: cannot import name 'config'
Run Code Online (Sandbox Code Playgroud)
所以我不知道该怎么做......非常感谢任何帮助.:)
我正在尝试使用PyInstaller构建一个单文件EXE,它包含一个图像和一个图标.我无法为我的生活而努力--onefile
.
如果我这样做--onedir
,一切工作都很顺利.当我使用时--onefile
,它找不到引用的附加文件(运行编译的EXE时).它找到了DLL和其他一切都很好,只是不是两个图像.
我查看了运行EXE时生成的temp-dir(\Temp\_MEI95642\
例如),文件确实在那里.当我将EXE放入该临时目录时,它会找到它们.非常困惑.
这是我添加到.spec
文件中的内容
a.datas += [('images/icon.ico', 'D:\\[workspace]\\App\\src\\images\\icon.ico', 'DATA'),
('images/loaderani.gif','D:\\[workspace]\\App\\src\\images\\loaderani.gif','DATA')]
Run Code Online (Sandbox Code Playgroud)
我应该补充一点,我也试过不把它们放在子文件夹中,没有什么区别.
编辑: 由于PyInstaller更新,标记的较新答案正确.
我试图importlib.import_module
在Python 2.7.2中使用并遇到奇怪的错误.
考虑以下目录结构:
a | + - __init__.py - b | + - __init__.py - c.py
a/b/__init__.py
具有以下代码:
import importlib mod = importlib.import_module("c")
(在实际代码中"c"
有一个名字.)
试着import a.b
,产生以下错误:
>>> import a.b Traceback (most recent call last): File "", line 1, in File "a/b/__init__.py", line 3, in mod = importlib.import_module("c") File "/opt/Python-2.7.2/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named c
我错过了什么?
谢谢!
我正在通过Zed Shaw的学习Python艰难的方式,我在第26课.在本课中,我们必须修复一些代码,代码从另一个脚本调用函数.他说我们不必导入它们来通过测试,但我很好奇我们将如何做到这一点.
以下是调用前一个脚本的特定代码行:
words = ex25.break_words(sentence)
sorted_words = ex25.sort_words(words)
print_first_word(words)
print_last_word(words)
print_first_word(sorted_words)
print_last_word(sorted_words)
sorted_words = ex25.sort_sentence(sentence)
print sorted_words
print_first_and_last(sentence)
print_first_a_last_sorted(sentence)
Run Code Online (Sandbox Code Playgroud) 假设我有一个模块foo.py
和一个包foo/
.如果我打电话
import foo
Run Code Online (Sandbox Code Playgroud)
哪一个会装?如何指定我的魔杖来加载模块或包?
python ×10
module ×4
package ×4
import ×3
python-3.x ×2
django ×1
django-1.7 ×1
importerror ×1
pycharm ×1
pyinstaller ×1
python-2.7 ×1