不管我怎么做,
自从我切换到Python 3之后
我只能从项目的根文件夹运行导入脚本,但不能从子文件夹运行导入脚本。我知道这里有很多关于我收到的错误html" target="_blank">消息的问题,但是建议的解决方案对我来说并不适用。有人能为这个小样本项目提供一个样本解决方案吗?我相信这会得到很多人的赞赏。
proj
├── foofolder
│ ├── __init__.py
│ └── foofile.py
├── subfolder
│ ├── __init__.py
│ └── run.py
└── __init__.py
我在foofile.py
中定义了函数fofund()
,并希望在run.py
中调用它。
如果run.py
直接在proj
中工作。但是(只是为了让事情井井有条),我想把它放在一个子文件夹里——这令人惊讶地似乎是不可能的。
恼人的是,我的IDE中的自动完成(PyCharm)建议从FooFoodFolder中删除。foofile导入foofun
应该可以工作。但事实并非如此。我也无法想象任何其他意义:
从文件夹中。foofile导入foofun
--
来自。文件夹。foofile导入foofun
--
来自项目。文件夹。foofile导入foofun
--
甚至绝对进口也不起作用。为什么找不到proj
?
sys。路径是:
['/parent/proj/subfolder'、'/parent/env/lib/python35.zip'、'/parent/env/lib/python3.5'、'/parent/env/lib/python3.5/plat-x86_64-linux-gnu'、'/parent/env/lib/python3.5/lib dynload'、'/usr/lib/python3.5'、'/usr/lib/python3.5/packages/env-64-linux-gnu'>
我使用Python 3.5。2在虚拟世界里。
编辑:当我认为这个问题特定于Python 3时,我错了。当我签入Python2.7时,问题和解决方案是相同的。12
Pevogam给出的解决方案起作用。第一个字面上只添加了
'...'
到'sys.path'
,它描述了执行run.py
的父文件夹。第二个显式地添加了'/父/proj'
。
我通常在Django项目中需要这个,我刚刚意识到Django提供了一个非常方便的解决方案,它为我解决了这个问题:
$ python manage.py shell < app/utils/scripts/script.py
在脚本中。py
我的导入内容如下:
from app.utils.functions.do_things import do_this, do_that
在这里找到:如何从Django shell执行Python脚本?
添加到bashrc:别名pys=PYTHONPATH=. python3
。然后pys子文件夹/run.py
工作!
注释:对我来说,脚本只是执行任务。它从不从其他地方调用或导入。我有很多。其中一些类似(例如,taskbu reset.py
,taskbu reset.py
)。我更喜欢将其组织为taskA/reset。py
等等。但是,那就不可能再运行它们了!但是,预先设置路径是一个简单的解决方案,它不需要我更改任何python代码。
我能想到的最快的方法是:
# subfolder/run.py
import sys
sys.path.append("..")
from foofolder.foofile import foofun
foofun()
但是请注意,只有在从其文件夹中运行run.py时,这才有效。不依赖于此的更复杂的方法是
# subfolder/run.py
import sys
import os.path as o
sys.path.append(o.abspath(o.join(o.dirname(sys.modules[__name__].__file__), "..")))
from foofolder.foofile import foofun
foofun()
你可以从任何地方到达功能。对于所有这些模块来说,最简单的方法是使用指向根包的相同指针,在您的情况下,这是通过添加“...”来实现的。然后,您可以从这个根包的角度执行任何导入。
我倾向于避免使用相对导入,因为它们会让人困惑,并降低可读性,但希望这能有所帮助。
[*]一些IDE可能会执行自己的项目扫描,这就是为什么只要您在IDE中运行python代码,它们仍然可以找到导入。
问题内容: 我有一个复杂的gradle脚本,该脚本封装了围绕将多个netbeans项目构建和部署到许多环境的功能。 该脚本可以很好地运行,但是从本质上来说,它是通过六个包含项目和环境信息的地图进行配置的。 我想将任务抽象到另一个文件中,以便可以在一个简单的构建文件中简单地定义地图,然后从另一个文件中导入任务。这样,我可以对多个项目使用相同的核心任务,并使用一组简单的地图来配置这些项目。 谁能告诉我
问题内容: 在我的终端中,输入,输出 我想将Atom配置为运行Python3脚本。在我的Atom Config中, 但是,如果我在名为的某些脚本中运行以下脚本, 我得到以下输出: 如何正确设置PATH以使Python3.x脚本正确运行?我可以使用其他包装吗? 问题答案: 转到Atom的菜单栏->包->脚本->配置脚本(或者,您可以使用快捷键Shift + Ctrl + Alt + O) 然后键入到
Pm2默认的start命令使用Python2运行脚本。如何让它使用python3运行脚本?假设我的脚本名为app.py。
问题内容: 我想从另一个Python脚本运行一个Python脚本。我想像使用命令行一样传递变量。 例如,我会跑我的,将通过值(0,1,2,3)的列表迭代第一个脚本,并通过那些到第二脚本,然后,等 我发现了Stack Overflow问题1186789,这是一个类似的问题,但是ars的答案调用了一个函数,在这里我想运行整个脚本,而不仅仅是函数,而balpha的答案则调用了脚本,但没有参数。我将其更改
我想从python脚本内部运行下面的bash脚本。 我的python脚本/函数如下所示 但是,我收到以下错误 - 我正在使用集群,我的系统规格如下 - 如果我遗漏了什么,请告诉我。我的基本问题是如何从给定的python脚本运行另一个python script,特别是当我们需要激活和停用虚拟环境时,因为由于一些依赖冲突,父python script和子python cript需要两个不同的虚拟环境。
问题内容: 我正在尝试在Jmeter SetUp线程中运行几个SQL脚本。是否可以通过Jmeter从.SQL文件运行SQL代码,以便我可以在执行其他线程之前初始化数据库。我只是不想破坏我的代码,并使用JDBC连接和JDBC请求在Jmeter中复制/粘贴代码。谢谢! 问题答案: __FileToString()函数似乎是您要找的东西,您可以将其放入JDBC Request 采样器中,并在其中指定.s