Προς το περιεχόμενο

PyCharm ImportError: No module named ...


Προτεινόμενες αναρτήσεις

  • Απαντ. 34
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Δημοσ.
Αφού κάνεις pip install, το anfis θα πρέπει να πάει στο site-packages (ή όπως το λένε στο λειτουργικό σου).

 

 

Είναι στο site-packages και το anfis και το scikit-fuzzy (σε macos είμαι).

 

Το directory «pkg» τι ρόλο βαράει; Γιατί το έχεις στο directory που δουλεύεις; Δοκίμασε να το μετακινήσεις/μετονομάσεις για να μην παίζει κανένα ρόλο και μετά ξαναδοκίμασε.

 

Κανένα ρόλο (απλά το είχα for archiving). Το έχω βγάλει εντελώς. (post #7)

 

Επίσης είσαι με python 2 ή 3;

 

2

Δημοσ.

Μάλλον τρέχεις python 3 στο pycharm...

 

Ιδού:

 

Python 3

(fuzzy3) $ ipython
Python 3.5.1 (default, Mar  3 2016, 09:29:07) 
Type "copyright", "credits" or "license" for more information.

IPython 4.1.2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import anfis
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-54ebb5946aae> in <module>()
----> 1 import anfis

/home/feanor/.virtualenvs/fuzzy/lib/python3.5/site-packages/anfis/__init__.py in <module>()
      1 import anfis
----> 2 from membership import membershipfunction
      3 from membership import mfDerivs

ImportError: No module named 'membership'

Python 2

(fuzzy2) $ ipython
iPython 2.7.11 (default, Mar 31 2016, 06:18:34)
Type "copyright", "credits" or "license" for more information.

IPython 4.1.2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import anfis

In [2]: anfis.
anfis.anfis               anfis.membership          anfis.membershipfunction  anfis.mfDerivs            

In [2]: anfis.anfis.
anfis.anfis.ANFIS            anfis.anfis.copy             anfis.anfis.itertools        anfis.anfis.np               
anfis.anfis.backprop         anfis.anfis.forwardHalfPass  anfis.anfis.mfDerivs         anfis.anfis.predict          

In [2]: anfis.anfis.ANFIS
Out[2]: <class anfis.anfis.ANFIS at 0x7fd709ea8f58>

In [3]: anfis.mem
anfis.membership          anfis.membershipfunction  

In [3]: anfis.membership
Out[3]: <module 'anfis.membership' from '/home/feanor/.virtualenvs/fuzzy2/lib/python2.7/site-packages/anfis/membership/__init__.pyc'>

Ξαναφτιάξε το virtual env και όρισε σωστά το --python ;)

 

Άσχετο: Κάτι τέτοια είναι που με κάνουν να μη θέλω τα IDEs


edit

Αν θες να καταλάβεις ποια είναι η διαφορά στα imports μεταξύ των εκδόσεων τότε διάβασε αυτό

https://www.python.org/dev/peps/pep-0328/

Δημοσ.

Μαζί σου, ούτε εγώ τα γουστάρω ιδιαίτερα...συνήθως είμαι me gedit, nano, vim για γρήγορα πράγματα, αλλά αν γράφεις C++ και έχεις ext APIs που χρησιμοποιείς (π.χ., ROS, PCL, OpenGL, κλπ) κλπ...το eclipse CDT βοηθάει ότι και να λέμε να δεις docs για classes, types, κλπ.

 

Λοιπόν, το τσέκαρα και όχι ο project interpreter χρησιμοποιεί Python 2.7.11...Δες το screenshot

post-116013-0-87737400-1459803449_thumb.jpg

 

Thx για το link, το έχω ξαναδεί.

Δημοσ.

Αυτό που μετράει είναι το τι έχεις στο Run/edit configurations και όχι στο project default. Τσέκαρε το, αν δεν είναι και αυτό τότε δεν έχω ιδέα τι γίνεται.

Selection_003.png

 

Αν το πρόβλημα εξακολουθεί, η πρότασή μου είναι να κάνεις ένα clean virtualenv και να τα κάνεις όλα εκεί βήμα-βήμα μέχρι να βρεις τι πάει στραβά.

Δημοσ.

Θα πρότεινα να βγάλεις το anfis από το project structure. Εφόσον είναι στο site-packages δεν χρειάζεται να είναι εκεί. 

 

Εάν το membership καλεί modules/functionalities από το anfis και δεν έρχεται μαζί με το anfis, τότε θα το βρει επειδή υπάρχει στο site-packages. 

 

 

Αυτό που εικάζω είναι ότι ο colleague έκανε develop το membership και για αυτό είχε τα αρχεία του anfis μέσα στο project structure (λάθος). 

Δημοσ.

Θα πρότεινα να βγάλεις το anfis από το project structure. Εφόσον είναι στο site-packages δεν χρειάζεται να είναι εκεί. 

 

Το έχω βγάλει (post #18)...

 

@pmav99

Τρέχω το community edition...δεν το βρίσκω κάπου στα prefs αυτό που δείχνεις (δες screenshot στο #20).

 

Άκυρο στραβομάρα (δεν είναι στα prefs...).

 

Τα ίδια και εδώ, 2.7.11...

post-116013-0-86197900-1459854560_thumb.jpg

Δημοσ.

Ναι βρε... εγώ έγραψα να το βγάλεις από το project structure :P 


Α! ΟΚ! Είδα το #7. 

 

 

Χμ... θα ήταν εύκολο ένα ss με το νέο proj struct; 

Δημοσ.

...σήμερα που βρήκα λίγο χρόνο άλλαξα την κλάση Metrics υιοθετώντας διάφορα που προτείνατε. Όποια σχόλια για διορθώσεις/αλλαγές/βελτιώσεις καλοδεχούμενα.

from __future__ import division
from __future__ import print_function
from __future__ import absolute_import
 
import numpy as np
import matplotlib.pyplot as plt
 
class Metrics(object):
    """ Class that contains all metrics """
 
    def __init__(self, time, gamma, phi, c, archive_K, archive_D, archive_a, archive_u):
        self.time = time
        self.gamma = gamma
        self.phi = phi 
        self.c = c
        self.archive_K = archive_K
        self.archive_D = archive_D
        self.archive_a = archive_a
        self.archive_u = archive_u
        self.mrt = None
 
    def calc_metric(self, metric_name):
        """ Calculate chosen metric. """       
        if metric_name == 'mrt':
            # sanity check
            if len(self.archive_D) != len(self.archive_a):
                raise ValueError("Archives with different length: <%r>, <%r>" % (self.archive_D, self.archive_a))
            gamma, phi, archive_D, archive_a = self.gamma, self.phi, self.archive_D, self.archive_a
            self.mrt = mrt = np.zeros_like(archive_D, dtype=np.float)
            # main algorithm
            for i, (a, D) in enumerate(zip(archive_a, archive_D)):
                g = D / a if a != 0 else 1000
                k = gamma * (g - phi)
                mrt[i] = np.exp(k) if g < 0.8 else 1 + k
            return mrt
        elif metric_name == 'rms':
            return np.sqrt(np.linalg.norm(self.archive_u - self.c * self.archive_a)**2 / self.time)
        else:
            msg = "Not known metric '%s'!" % metric_name
            raise ValueError(msg)            
 
    def plot_metric(self, metric_name, x_label = None, y_label = None, marker = None, line_width = None):
        """ Plot chosen metric. """
        _metrics = {
        'mrt': {'val': [self.mrt], 'xlabel': 'time interval', 'ylabel': 'mRT (s)', 'marker': ['b'], 'linewidth': 1.5},
        'cpu': {'val': [self.archive_a, self.archive_u], 'xlabel': 'time interval', 'ylabel': 'CPU (%)', 'marker': ['b', 'k'], 'linewidth': 1.5}, 
        'gain': {'val': [self.archive_K], 'xlabel': 'time interval', 'ylabel': 'gain', 'marker': ['b'], 'linewidth': 1.5}
        };
        
        if x_label is None:
            x_label = _metrics[metric_name]['xlabel']
        if y_label is None:
            y_label = _metrics[metric_name]['ylabel']
        if marker is None:
            marker = _metrics[metric_name]['marker']
        if line_width is None:
            line_width = _metrics[metric_name]['linewidth']            
        
        plot_val = _metrics[metric_name]['val']
 
        if metric_name is 'mrt' and self.mrt is None:
            msg = "mRT cost has not been calculated. Call <calc_mrt_cost()> and try again!"
            raise ValueError(msg)
        if metric_name is 'cpu' and len(marker) is not 2:
            msg = "<plot_metric()> for '%s' requires exactly 2 markers (%d defined)!" % (metric_name, len(marker))
            raise ValueError(msg)
 
        for count in range(0,len(plot_val)):
            plt.plot(plot_val[count], marker[count], linewidth=line_width)
        plt.xlabel(x_label)
        plt.ylabel(y_label)
        #plt.box(on=True)
        plt.show()
 
# Test
metrics = Metrics(100, 10, 0.8, 0.95, np.array(range(10)).T, np.array(range(8)).T, np.array(range(8)).T, np.array(range(8)).T)[/font]
x = metrics.calc_metric('mrt') # compute mRT cost
metrics.plot_metric('mrt', 'time interval', 'mRT (s)', None, 1) # plot mRT cost
metrics.plot_metric(metric_name = 'cpu', x_label = 'time interval', y_label = 'CPU (%)', marker = ['go', 'r'], line_width = 1) # plot gain
metrics.plot_metric('gain', 'time interval', 'Gain', ['g--'], 1) # plot gain
Δημοσ.

μια πρώτη παρατήρηση. Υπάρχει πραγματικά λόγος τα markers και τα linewidth να είναι configurable; Και αν υπάρχει, δεν είναι καλύτερα να τα κάνεις μία φορά configure και μετά τέλος; Το λέω αυτό γιατί συνήθως θελουμε ενιαία παρουσίαση σε όλα τα διαγράμματα. Για να το πετύχουμε αυτό, χρειάζεται κάτι τέτοιο: http://matplotlib.org/users/customizing.html#dynamic-rc-settings
 
Πχ

import matplotlib as mpl
# Set up the matplotlib figures.
mpl.rcParams['lines.linewidth'] = 2.3
mpl.rcParams['font.size'] = 12
mpl.rcParams['font.family'] = 'serif'
mpl.rcParams['mathtext.fontset'] = 'stix'   # μπορεί να μην την έχεις!
mpl.rcParams['axes.labelsize'] = 'x-large'
mpl.rcParams['xtick.labelsize'] = 'medium'
mpl.rcParams['ytick.labelsize'] = 'medium'
mpl.rcParams['legend.fontsize'] = 'large'

Κάτι άλλο που είναι χρήσιμο είναι εκτός από διαφορετικά χρώματα, να χρησιμοποιούμε διαφορετικά dashes ώστε να βγαίνει άκρη από τα διαγράμματά μας ακόμα και αν εκτυπωθούν ασπρόμαυρα. Ένας τρόπος για να το πετύχουμε αυτό είναι o εξής:

import matplotlib.pyplot as plt

LINE_STYLES = {
    'black': {'marker': None, 'dash': (None,None), 'color' : 'black'}, # Continuous line
    'b': {'marker': None, 'dash': [5,5], 'color' : 'b'},
    'g': {'marker': None, 'dash': [5,3,1,3], 'color' : 'g'},
    'r': {'marker': None, 'dash': [5,3,1,2,1,10], 'color' : 'm'},
    'c': {'marker': None, 'dash': [5,2,5,2,5,10], 'color' : 'c'},
    'm': {'marker': None, 'dash': [1,3], 'color' : 'r'}
    #'y': {'marker': 'o', 'dash': [None,None]}   # Continuous line with markers
}

def apply_line_styles(figure, line_styles=LINE_STYLES):
    """ Apply line styles to the figure. """
    for ax in figure.axes:
        for line in ax.get_lines():
            original_color = line.get_color()
            line_style = line_styles[original_color]
            line.set_dashes(line_style['dash'])
            line.set_marker(line_style['marker'])
            line.set_color(line_styles['color'])
 
figure = plt.figure()
plt.plot(range(4), [i**2 for i in range(4)])
plt.plot(range(4), [i**3 for i in range(4)])
plt.plot(range(4), [i**4 for i in range(4)])
apply_line_styles(figure)
plt.show()

Πάνε αρκετά χρόνια από τότε που έγραψα το παραπάνω, οπότε ίσως σήμερα να υπάρχει και καλύτερος τρόπος να κάνεις το ίδιο πράγμα.

 

edit

------------

Α ναι, αν σε ενδιαφέρει η εμφάνιση, θες να δεις κάποια βιβλιοθήκη σαν τη http://stanford.edu/~mwaskom/software/seaborn/ κατά πάσα πιθανότητα θα έχει και καλύτερο API από αυτό που προτείνω πιο πάνω.

 

edit 2

Δες και αυτό: http://stackoverflow.com/a/34577275/592289

Δημοσ.

@pmav99

Σχετικά με τη πρώτη παρατήρηση, έτσι όπως το έχω κάνει έχω τη δυνατότητα να αλλάζω το linewidth, markers, colors, κλπ σε κάθε graph ξεχωριστά. Με το rcParams δηλώνω καθολικά τα settings να ισχύουν σε όλα τα graphs, πχ, ίδιο linewidth παντού, το οποίο δε θέλω. Νομίζω με το dict είναι αρκετά ευέλικτος ο τρόπος και συμμαζεμένος. Θα μπορούσα απλά να τα έχω με τον ίδιο τρόπο hardcoded αλλά με τα method args έχω την ευελιξία να κάνω reconfigure τα graphs με minimum cost.

 

Σχετικά με τη δεύτερη, για τα markers, αν έχω καταλάβει, το κάνω αυτό που λες. Αν δεις έχω: marker = ['go', 'r'] δηλαδή green με circles και η δεύτερη red ή ['g--'] δηλαδή green με dashes. Δεν ξέρω αν εννοείς κάτι άλλο.

Δημοσ.
Σχετικά με τη πρώτη παρατήρηση, έτσι όπως το έχω κάνει έχω τη δυνατότητα να αλλάζω το linewidth, markers, colors, κλπ σε κάθε graph ξεχωριστά.

Το ερώτημα είναι, για ποιο λόγο; Δηλαδή όταν θα τρέχεις την εφαρμογή σου θα φτιάχνεις ένα διάγραμμα με linewidth 2 και μετά ένα με 3; Αν ναι, τότε καλά το έκανες. Αν όχι τότε τζάμπα περιπλέκεις τα πράγματα.

 

Και για να είναι ξεκάθαρο, σύμφωνα με την εμπειρία μου, το σετάρισμα του matplotlib στην πλειοψηφία των περιτπώσεων πρέπει να γίνεται μία φορά στην αρχή και τέλος. Πειραματίζεσαι δηλαδή για να δεις ποια settings σου αρέσουν, βάζεις το matplotlib να τα χρησιμοποιεί με το που ξεκινάς την εφαρμογή σου και δεν ξαναασχολείσαι.

 

Σχετικά με τη δεύτερη, για τα markers, αν έχω καταλάβει, το κάνω αυτό που λες. Αν δεις έχω: marker = ['go', 'r'] δηλαδή green με circles και η δεύτερη red ή ['g--'] δηλαδή green με dashes. Δεν ξέρω αν εννοείς κάτι άλλο.

Δεν κάνουμε ακριβώς το ίδιο. Στη συγκεκριμένη περίπτωση κάνεις hard code κάποια settings για ένα συγκεκριμένο figure (το figure σου μάλιστα έχει μόνο μία γραμμή). Αυτό που πρότεινα είναι λίγο πιο γενικό. Σκέψου πχ να έχεις να κάνεις N plots το οποίο θα έχει πχ 4 γραμμές το καθένα. Με τον τρόπο που προτείνω οι αντίστοιχες γραμμές και των Ν plots θα έχουν τα ίδια ακριβώς settings (πχ η πρώτη γραμμή όλων των figures θα είναι blue, με dash [5-5], η δεύτερη γραμμή red με dash [5, 3, 1, 3] κτλ).

Δημοσ.

Το ερώτημα είναι, για ποιο λόγο; Δηλαδή όταν θα τρέχεις την εφαρμογή σου θα φτιάχνεις ένα διάγραμμα με linewidth 2 και μετά ένα με 3; Αν ναι, τότε καλά το έκανες. Αν όχι τότε τζάμπα περιπλέκεις τα πράγματα.

 

Και για να είναι ξεκάθαρο, σύμφωνα με την εμπειρία μου, το σετάρισμα του matplotlib στην πλειοψηφία των περιτπώσεων πρέπει να γίνεται μία φορά στην αρχή και τέλος. Πειραματίζεσαι δηλαδή για να δεις ποια settings σου αρέσουν, βάζεις το matplotlib να τα χρησιμοποιεί με το που ξεκινάς την εφαρμογή σου και δεν ξαναασχολείσαι.

 

Δεν κάνουμε ακριβώς το ίδιο. Στη συγκεκριμένη περίπτωση κάνεις hard code κάποια settings για ένα συγκεκριμένο figure (το figure σου μάλιστα έχει μόνο μία γραμμή). Αυτό που πρότεινα είναι λίγο πιο γενικό. Σκέψου πχ να έχεις να κάνεις N plots το οποίο θα έχει πχ 4 γραμμές το καθένα. Με τον τρόπο που προτείνω οι αντίστοιχες γραμμές και των Ν plots θα έχουν τα ίδια ακριβώς settings (πχ η πρώτη γραμμή όλων των figures θα είναι blue, με dash [5-5], η δεύτερη γραμμή red με dash [5, 3, 1, 3] κτλ).

Για το πρώτο επειδή θα μπει σε παρουσίαση, διπλωματική κλπ έχει νόημα να μπορεί εύκολα να διαμορφωθεί διαφορετικά (όχι oτi δεν γίνεται όπως λες, αλλά μια και το έκανα αν είναι γενικά σωστό λέω να το αφήσω).

 

Για το δεύτερο, αν δεις στο πρώτο graph (cpu) τυπώνω 2 γραφικές με διαφορετικά χρώματα και markers στο ίδιο figure.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...