Ligar para uma função de outro ficheiro?
set_ Up: tenho um ficheiro .py para cada função que preciso de usar num programa.
Neste programa, preciso de ligar para a função dos ficheiros externos. Eu tentei.from file.py import function(a,b)
mas eu entendo o erro:
ImportError: nenhum módulo chamado "file.py'; file is not a packageComo resolvo este problema?
17 answers
Não há necessidade de adicionar {[[0]} durante a importação. Basta escrever from file import function
, e depois ligar para a função usando function(a, b)
. A razão pela qual isto pode não funcionar, é porque file
é um dos módulos centrais do Python, por isso sugiro que mude o nome do seu ficheiro.
Lembre-se que se está a tentar importar funções de a.py
para um ficheiro chamado b.py
, terá de se certificar de que a.py
e b.py
estão na mesma pasta.
Em primeiro lugar, não precisas de um .py
.
Se tem um ficheiro a.py
e dentro tem algumas funções:
def b():
# Something
return 1
def c():
# Something
return 2
E se queres importá-los em z.py
tens de escrever
from a import b, c
from file import function
Outra maneira é importar o ficheiro inteiro
import file as fl
Então você pode chamar qualquer função dentro file.py utilizar
fl.function(a,b)
Se o seu ficheiro estiver na estrutura de pacotes diferente e quiser chamá-lo de um pacote diferente, então pode chamá-lo dessa forma:
Digamos que tem a seguinte estrutura de pacotes no seu projecto python:Em - com.my.func.DifferentFunction
python você tem alguma função, como:
def add(arg1, arg2):
return arg1 + arg2
def sub(arg1, arg2) :
return arg1 - arg2
def mul(arg1, arg2) :
return arg1 * arg2
E se quiser chamar funções diferentes de Example3.py
, Então da seguinte forma pode fazê-lo:
Defina a declaração de importação no Example3.py
- ficheiro para importar toda a função
from com.my.func.DifferentFunction import *
Ou definir cada nome de função que deseja importar
from com.my.func.DifferentFunction import add, sub, mul
Então em {[6] } Você pode chamar a função para executar:
num1 = 20
num2 = 10
print("\n add : ", add(num1,num2))
print("\n sub : ", sub(num1,num2))
print("\n mul : ", mul(num1,num2))
Resultado:
add : 30
sub : 10
mul : 200
Você pode chamar a função de um diretório diferente também, no caso de você não pode ou não quer ter a função no mesmo diretório que você está trabalhando. Você pode fazer isso de duas maneiras (talvez haja mais alternativas, mas estas são as que trabalharam para mim).
Alternativa 1 Alterar temporariamente a sua pasta de trabalho
import os
os.chdir("**Put here the directory where you have the file with your function**")
from file import function
os.chdir("**Put here the directory where you were working**")
Alternativa 2 Adicione a pasta onde tem a sua função ao sys.localização
import sys
sys.path.append("**Put here the directory where you have the file with your function**")
from file import function
Se está a ver 'ModuleNotFoundError: sem módulo chamado', provavelmente precisa do ponto(.) na frente do nome do ficheiro como abaixo;
De .ficheiro importar a função
Primeiro grave o ficheiro no formato. py (por exemplo, my_example.py
).
E se esse arquivo tem funções,
def xyz():
--------
--------
def abc():
--------
--------
Na função de chamada você só tem que digitar as linhas abaixo.
Nome do ficheiro: my_example2.py
============================
import my_example.py
a = my_example.xyz()
b = my_example.abc()
============================
Mudar o nome do módulo para algo que não seja 'file'.
Então, certifique-se também quando você está chamando a função que:
1) Se estiver a importar o módulo inteiro, irá reiterar o nome do módulo ao chamá-lo:
import module
module.function_name()
Ou
import pizza
pizza.pizza_function()
2)ou se está a importar funções específicas, funções com um nome alternativo, ou todas as funções usando*, não repete o nome do Módulo:
from pizza import pizza_function
pizza_function()
Ou
from pizza import pizza_function as pf
pf()
Ou
from pizza import *
pizza_function()
As funções do ficheiro. py (pode (claro) estar em directório diferente) podem ser importadas simplesmente escrevendo primeiro directórios e depois o nome do ficheiro sem a extensão. py:
from directory_name.file_name import function_name
E posterior utilização: function_name()
Lá Dentro MathMethod.Py.
def Add(a,b):
return a+b
def subtract(a,b):
return a-b
Lá Dentro Main.Py
import MathMethod as MM
print(MM.Add(200,1000))
Resultado: 1200
Não tens de adicionar file.py
.
Basta manter o arquivo no mesmo local com o arquivo de onde você deseja importá-lo. Em seguida, basta importar suas funções:
from file import a, b
Deverá ter o ficheiro no mesmo local que o dos ficheiros Python que está a tentar importar. Também' a partir da função de importação de arquivos ' é suficiente.
Adicione um ponto(.) na frente de um nome de arquivo se você quiser importar este arquivo que está no mesmo diretório onde você está executando seu código.
Por exemplo, estou a correr um ficheiro chamado a.py e eu quero importar um método chamado addFun que está escrito em b.py, e b.py existe no mesmo directório De ...B importar addFunfrom anotherfile import method1
Se o método 1 faz parte de uma classe, que a classe seja a classe 1, então
from anotherfile import class1
Então crie um objeto da classe 1, suponha que o nome do objeto seja ob1, então
ob1 = class1()
ob1.method1()
helper.py
from . import filename # without .py
Dentro do meu primeiro ficheiro defini a função diversão como abaixo
# file name is firstFile.py
def fun():
print('this is fun')
Dentro do segundo ficheiro vamos dizer que quero chamar a função diversão {[[6]}
from . import firstFile
def secondFunc():
firstFile.fun() # calling `fun` from the first file
secondFunc() # calling the function `secondFunc`
No meu programa principal {[[0]} preciso da função call passGen
que gera a barra de senhas e que as funções estão em baixo modules\passwordGen.py
A solução mais rápida e fácil para mim é
Abaixo está a minha estrutura de directórios
Por isso em detectiveROB.py
tenho de importar a minha função com a sintaxe abaixo
from modules.passwordGen import passGen